ホームページ > バックエンド開発 > C++ > リフレクションを使用して任意のデータ型の定数を取得するにはどうすればよいですか?

リフレクションを使用して任意のデータ型の定数を取得するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-03 02:48:38
オリジナル
375 人が閲覧しました

How Can I Retrieve Constants of Any Data Type Using Reflection?

リフレクションを使用して任意のデータ型の定数を取得する方法

興味深い質問は、実行時に特定のデータ型内に存在する定数を判断することです。 。リフレクションの原理を使用してこれを実現する方法を調べてみましょう。

リフレクションで定数の領域に飛び込む

定数を取得する謎を解明するために、リフレクション兵器庫が提供する大胆なメソッド。リフレクションを使用すると、型を精査して操作できるようになり、その型が持つ隠された宝石を引き出すことができます。

定数を明らかにするための模範的なガイド

この冒険に乗り出すには、特定の型のコアを掘り下げ、その不変部分を抽出する例示的なルーチンを提供します。 constants:

private FieldInfo[] GetConstants(System.Type type)
{
    // Initialize an assembly of constants
    ArrayList constants = new ArrayList();

    // Summon an army of field explorers to unearth all public, static gems
    FieldInfo[] fieldInfos = type.GetFields(
        // Command the retrieval of public and static fields
        BindingFlags.Public | BindingFlags.Static | 
        // Extend the search to the depth of base types
        BindingFlags.FlattenHierarchy);

    // Patrol through the reconnaissance report, enlisting only the immutable constants
    foreach(FieldInfo fi in fieldInfos)
        // Assess if the field's value is immutable and endures from compile-time
        // Exclude any field that can be tampered with in the constructor
        if(fi.IsLiteral && !fi.IsInitOnly)
            constants.Add(fi);           

    // Formulate an array of FieldInfos holding the unearthed constants
    return (FieldInfo[])constants.ToArray(typeof(FieldInfo));
}
ログイン後にコピー

洗練されたタッチのためのジェネリックスと LINQ の採用

前述のアプローチは、ジェネリックスの優雅さと LINQ のパワーによってさらに洗練されます。この変換により、よりクリーンで簡潔なコードベースが得られます。

private List<FieldInfo> GetConstants(Type type)
{
    FieldInfo[] fieldInfos = type.GetFields(BindingFlags.Public |
         BindingFlags.Static | BindingFlags.FlattenHierarchy);

    return fieldInfos.Where(fi => fi.IsLiteral &amp;&amp; !fi.IsInitOnly).ToList();
}
ログイン後にコピー

シンプルさのストローク

ミニマリズムを目指して、この洗練されたアプローチを簡潔なものに凝縮します。ライナー:

type.GetFields(BindingFlags.Public | BindingFlags.Static |
               BindingFlags.FlattenHierarchy)
    .Where(fi => fi.IsLiteral &amp;&amp; !fi.IsInitOnly).ToList();
ログイン後にコピー

この兵器で武装するテクニックを活用すると、あらゆるデータ型の中心部に隠された秘密を明らかにできるようになります。

以上がリフレクションを使用して任意のデータ型の定数を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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