C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#で現在の型(Type)のフィールドを取得する方法

C#では、リフレクション(System.Reflection名前空間)を利用することで、指定した型が持つフィールド情報を実行時に取得できます。TypeクラスのGetFieldsメソッドにBindingFlagsを組み合わせれば、public/非public、static/インスタンスといった条件で、取得対象のフィールドを柔軟に絞り込むことが可能です。

サンプルコード1:System.String型の非publicフィールドを取得する

まずは、System.String型が持つ非publicかつ静的なフィールドを取得する例を見てみましょう。

using System;
using System.Reflection;

public class Demo {
   public static void Main() {
      Type type = typeof(System.String);
      FieldInfo[] fields = type.GetFields(BindingFlags.Static | BindingFlags.NonPublic);
      Console.WriteLine("以下は非publicフィールドの一覧です=");
      foreach (FieldInfo myField in fields) {
         Console.WriteLine(myField.ToString());
      }
   }
}

実行結果

上記のコードを実行すると、次のような出力が得られます。

以下は非publicフィールドの一覧です=
Int32 TrimHead
Int32 TrimTail
Int32 TrimBoth
Int32 charPtrAlignConst
Int32 alignConst

コードのポイント

  • typeof演算子でSystem.String型のTypeオブジェクトを取得しています。
  • GetFieldsメソッドにBindingFlags.StaticBindingFlags.NonPublicを渡すことで、「静的かつ非public」のフィールドだけを抽出できます。
  • 戻り値はFieldInfo型の配列なので、foreachループで各フィールドの詳細情報を順に出力しています。

サンプルコード2:System.Char型の非publicフィールドを取得する

続いて、別の型であるSystem.Charに対して同じ処理を行う例です。

using System;
using System.Reflection;

public class Demo {
   public static void Main() {
      Type type = typeof(System.Char);
      FieldInfo[] fields = type.GetFields(BindingFlags.Static | BindingFlags.NonPublic);
      Console.WriteLine("\n以下は非publicフィールドの一覧です=");
      foreach (FieldInfo myField in fields) {
         Console.WriteLine(myField.ToString());
      }
   }
}

実行結果

このコードを実行すると、次の出力が得られます。

以下は非publicフィールドの一覧です=
Byte[] categoryForLatin1
Int32 UNICODE_PLANE00_END
Int32 UNICODE_PLANE01_START
Int32 UNICODE_PLANE16_END
Int32 HIGH_SURROGATE_START
Int32 LOW_SURROGATE_END

補足:BindingFlagsとは

BindingFlagsは、リフレクションによるメンバー検索の範囲を制御するための列挙体です。主なフラグは以下の通りです。

  • BindingFlags.Public … publicなメンバーを検索対象に含めます。
  • BindingFlags.NonPublic … privateやinternalなどの非publicメンバーを検索対象に含めます。
  • BindingFlags.Static … 静的(static)メンバーを検索対象に含めます。
  • BindingFlags.Instance … インスタンスメンバーを検索対象に含めます。

これらのフラグは、ビットごとのOR演算子(|)で組み合わせて指定します。なお、フラグを何も指定せずにGetFields()を呼び出した場合、戻り値には「publicな静的・インスタンスフィールド」のみが含まれる点に注意してください。非publicメンバーを調べたい場合は、必ずBindingFlags.NonPublicを明示的に指定する必要があります。

  1. C#で現在のインスタンスの型を取得する方法(GetTypeメソッド)

    C#でオブジェクトの現在のインスタンスの型(実行時の型)を取得するには、GetType()メソッドを使用します。このメソッドはすべての型の基底クラスであるSystem.Objectに定義されており、呼び出し元インスタンスの正確な型をSystem.Typeオブジェクトとして返します。 GetType()メソッドの基本 GetType()はインスタンスに対して呼び出すことで、その実行時の型情報を取得できます。戻り値であるTypeオブジェクトをそのまま文字列連結して出力すると、「System.String」や「System.Int32」のような完全修飾型名が表示されます。 例1:string型のイン

  2. C#で列挙型(Enum)の型を取得する方法

    C#で列挙型(Enum)の型情報を取得するには、GetType()メソッドを使用します。この記事では、実際のコード例を通じて、列挙型の型名や基になる型(Underlying Type)の取得方法をわかりやすく解説します。 列挙型の準備 まず、複数の列挙型の値を格納した配列を用意します。ここでは、.NET標準ライブラリに含まれる ConsoleColor と DayOfWeek の2つの列挙型を使用します。 Enum[] values = { ConsoleColor.Blue, DayOfWeek.Sunday}; GetType()メソッドで型を取得する 列挙値の型を取得するには、各値