런타임 시 클래스 속성에 대한 동적 액세스
객체 지향 프로그래밍에서 특성은 클래스와 해당 멤버에 대한 추가 메타데이터를 제공합니다. 런타임에 속성 값을 검색하는 것은 클래스별 정보나 사용자 정의 동작에 액세스하는 데 유용합니다. 이 문서에서는 런타임에 클래스에 할당된 속성 값을 읽는 방법을 살펴봅니다.
"MyClass" 클래스에서 "DomainName" 속성을 가져와야 한다고 가정해 보겠습니다. 이 속성은 "DomainNameAttribute" 유형이며 "MyTable" 값을 갖습니다. 목표는 이 속성을 동적으로 읽고 해당 값을 반환하는 일반 메서드를 만드는 것입니다.
이를 위해 .NET 리플렉션 기능을 활용할 수 있습니다.
<code class="language-csharp">public string GetDomainName<T>() { var dnAttribute = typeof(T).GetCustomAttributes( typeof(DomainNameAttribute), true ).FirstOrDefault() as DomainNameAttribute; if (dnAttribute != null) { return dnAttribute.Name; } return null; }</code>
이 코드에서는 "GetCustomAttributes" 메서드를 사용하여 지정된 유형에서 "DomainNameAttribute" 유형의 모든 속성을 검색합니다. 그런 다음 첫 번째(일반적으로 유일한) 특성을 "DomainNameAttribute" 유형으로 캐스팅합니다. 속성이 존재하는 경우 해당 "이름" 속성이 반환됩니다. 그렇지 않으면 null을 반환합니다.
이 방법을 사용하면 런타임 시 "DomainName" 속성 값을 동적으로 검색할 수 있습니다.
<code class="language-csharp">// 这应该返回 "MyTable" String DomainNameValue = GetDomainName<MyClass>();</code>
이 기능을 모든 속성에 일반화하기 위해 확장 메서드를 만들 수 있습니다.
<code class="language-csharp">public static class AttributeExtensions { public static TValue GetAttributeValue<TAttribute, TValue>( this Type type, Func<TAttribute, TValue> valueSelector) where TAttribute : Attribute { var att = type.GetCustomAttributes( typeof(TAttribute), true ).FirstOrDefault() as TAttribute; if (att != null) { return valueSelector(att); } return default(TValue); } }</code>
사용방법:
<code class="language-csharp">string name = typeof(MyClass) .GetAttributeValue((DomainNameAttribute dna) => dna.Name);</code>
이 일반화된 확장 메서드는 유형과 관련된 모든 속성에 액세스할 수 있는 유연성을 제공하므로 런타임 시 클래스 속성을 검사하기 위한 다목적 도구가 됩니다.
위 내용은 런타임 시 C#에서 클래스 특성에 동적으로 액세스하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!