ホームページ > バックエンド開発 > C++ > C# でクラス属性を動的に取得するにはどうすればよいですか?

C# でクラス属性を動的に取得するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-12 08:28:11
オリジナル
118 人が閲覧しました

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>
ログイン後にコピー

以上がC# でクラス属性を動的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート