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

実行時にクラスから属性値を動的に取得するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-12 06:04:12
オリジナル
896 人が閲覧しました

How Can I Dynamically Retrieve Attribute Values from a Class at Runtime?

実行時にプロパティを取得する

この記事では、クラスの属性値に動的にアクセスして抽出する一般的な方法を紹介します。

専用のメソッドを使用する

型パラメータを受け入れるジェネリック メソッドを定義します:

<code class="language-csharp">public string GetDomainName<T>()</code>
ログイン後にコピー

内部メソッド:

  • typeof(T).GetCustomAttributes を使用してカスタム プロパティを取得します:

    <code class="language-csharp">  var dnAttribute = typeof(T).GetCustomAttributes(
        typeof(DomainNameAttribute), true
      ).FirstOrDefault() as DomainNameAttribute;</code>
    ログイン後にコピー
  • 属性が存在する場合は、その値を返します:

    <code class="language-csharp">  if (dnAttribute != null)
      {
        return dnAttribute.Name;
      }</code>
    ログイン後にコピー
  • それ以外の場合は、null を返します:

    <code class="language-csharp">  return null;</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
}</code>
ログイン後にコピー

内部拡張メソッド:

  • カスタム属性の取得:

    <code class="language-csharp">  var att = type.GetCustomAttributes(
        typeof(TAttribute), true
      ).FirstOrDefault() as TAttribute;</code>
    ログイン後にコピー
  • 属性が存在する場合は、提供された valueSelector を使用して必要な値を抽出します:

    <code class="language-csharp">  if (att != null)
      {
        return valueSelector(att);
      }</code>
    ログイン後にコピー
  • それ以外の場合は、次の型のデフォルト値を返します:

    <code class="language-csharp">  return default(TValue);</code>
    ログイン後にコピー

使用例

  • MyClassDomainName 属性を取得します:
<code class="language-csharp">string name = typeof(MyClass).GetDomainName<MyClass>();</code>
ログイン後にコピー
  • 拡張メソッドを使用して MyClass の属性値を取得します:
<code class="language-csharp">string name = typeof(MyClass)
    .GetAttributeValue<DomainNameAttribute, string>((DomainNameAttribute dna) => dna.Name);</code>
ログイン後にコピー

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

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