C# でのクラス属性への動的アクセス
実行時にクラス属性にアクセスすることは、メタデータや構成情報を動的に取得するための強力な手法です。 これは、C# のリフレクション機能を使用して実現できます。
特定の属性 (DomainNameAttribute) の取得:
汎用メソッド GetDomainName<T>
は、任意のクラスからの DomainNameAttribute
の取得を簡素化します。
<code class="language-csharp">public string GetDomainName<T>() { var dnAttribute = typeof(T).GetCustomAttributes(typeof(DomainNameAttribute), true) .FirstOrDefault() as DomainNameAttribute; return dnAttribute?.Name; }</code>
使用例:
<code class="language-csharp">// Returns "MyTable" (assuming myclass has the attribute) string domainName = 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 attribute = type.GetCustomAttributes(typeof(TAttribute), true) .FirstOrDefault() as TAttribute; return attribute != null ? valueSelector(attribute) : default(TValue); } }</code>
使用例:
<code class="language-csharp">string name = typeof(MyClass).GetAttributeValue((DomainNameAttribute dna) => dna.Name);</code>
このメソッドは属性タイプとラムダ式を受け取り、属性インスタンスから必要なプロパティ値を選択します。 これにより、さまざまな属性プロパティに柔軟にアクセスできるようになります。
以上がC# で実行時にクラス属性を読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。