>백엔드 개발 >C++ >C#에서 클래스 특성을 동적으로 검색하려면 어떻게 해야 합니까?

C#에서 클래스 특성을 동적으로 검색하려면 어떻게 해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-12 08:28:11121검색

How Can I Dynamically Retrieve Class Attributes in C#?

클래스 속성을 동적으로 획득

객체 지향 프로그래밍에서 속성은 클래스에 첨부된 메타데이터로, 코드 자체 이상의 추가 정보를 제공합니다. 런타임에 속성을 동적으로 읽어야 하는 경우 이를 수행하는 방법은 다음과 같습니다.

도메인 속성의 예

DomainName 속성이 포함된 다음 코드 조각을 고려하세요.

<code class="language-csharp">[DomainName("MyTable")]
public class MyClass : DomainBase
{ }</code>

속성 읽기를 위한 일반적인 방법

우리의 목표는 특정 클래스의 DomainName 속성을 ​​읽고 해당 값을 반환하는 일반 메서드를 만드는 것입니다.

<code class="language-csharp">string GetDomainName<T>()
{
    var dnAttribute = typeof(T).GetCustomAttributes(
        typeof(DomainNameAttribute), true
    ).FirstOrDefault() as DomainNameAttribute;

    if (dnAttribute != null)
    {
        return dnAttribute.Name;
    }
    return null;
}</code>

이 방법은 다음과 같이 사용할 수 있습니다.

<code class="language-csharp">string domainNameValue = GetDomainName<MyClass>(); // 返回 "MyTable"</code>

공통속성 읽기

AttributeExtensions 클래스를 사용하면 속성 읽기 기능을 일반화하여 모든 속성 유형에서 작동할 수 있습니다.

<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으로 문의하세요.