>백엔드 개발 >C++ >런타임 시 C#에서 클래스 특성에 동적으로 액세스하려면 어떻게 해야 합니까?

런타임 시 C#에서 클래스 특성에 동적으로 액세스하려면 어떻게 해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-12 07:36:43828검색

How Can I Dynamically Access Class Attributes in C# at Runtime?

런타임 시 클래스 속성에 대한 동적 액세스

객체 지향 프로그래밍에서 특성은 클래스와 해당 멤버에 대한 추가 메타데이터를 제공합니다. 런타임에 속성 값을 검색하는 것은 클래스별 정보나 사용자 정의 동작에 액세스하는 데 유용합니다. 이 문서에서는 런타임에 클래스에 할당된 속성 값을 읽는 방법을 살펴봅니다.

"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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.