Reflection(リフレクション)を使ってプロパティを取得する [C#]

Reflection(リフレクション)を使ってプロパティを取得する C#

.NETにはリフレクション(System.Reflection名前空間)という、アセンブリや、アセンブリに定義されているクラス、インターフェース、構造体、列挙体などに関する情報を取得できる仕組みが用意されています。
リフレクションを使うとプログラムの実行時に型のインスタンスを作成したり、作成した型インスタンスを呼び出したり、アクセスしたりすることができます。

今回は、リフレクション(Reflection)を使用して、クラスや構造体などのオブジェクトからプロパティの一覧を取得する方法を紹介します。

オブジェクトの型を取得する

オブジェクトからプロパティの一覧を取得するには、まず型(Type)を取得します。

オブジェクトの型オブジェクトを取得する方法については、以下の記事を参考にしてください。

オブジェクトの型オブジェクトを取得する [C#]
オブジェクトの型オブジェクト(System.Typeのインスタンス)を取得する方法を紹介します。 本記事に記載のコードでは、以...

プロパティの一覧を取得する

プロパティの一覧を取得するには、TypeクラスのGetPropertiesメソッドを使用します。

GetPropertiesメソッドはパラメーター(引数)を指定せずに呼び出すと、すべてのパブリックプロパティを返します。

GetPropertiesメソッドには、取得するプロパティの種類を表すフラグ(メンバーと型の検索方法を制御するフラグ)を指定することができます。
指定するフラグには、System.Reflection名前空間にあるBindingFlags列挙型のフィールド値を指定します。
BindingFlags列挙型には、パブリックメンバーを表す「Public」、パブリック以外のメンバーを表す「NonPublic」や、インスタンスメンバーを表す「Instance」、静的メンバーを表す「Static」などがあります。

BindingFlags 列挙型

以下にColor構造体から静的パブリックプロパティの一覧と、インスタンス非パブリックプロパティの一覧を取得する例を示します。

特定のプロパティを取得する

GetPropertiesメソッドではプロパティの一覧が取得できますが、Typeクラスには特定のプロパティの情報を取得するメソッドも用意されています。
特定のプロパティの情報を取得するにはGetPropertyメソッドを使用します。

GetPropertyメソッドで特定のプロパティの情報を取得するには、メソッドのパラメーター(引数)にプロパティ名を指定します。
GetPropertyメソッドのパラメーター(引数)にプロパティ名のみ指定した場合は、パブリックプロパティを対象に情報を取得します。
パブリックプロパティ以外のプロパティや、インスタンスプロパティ、静的プロパティなどのプロパティの形式を指定してGetPropertyメソッドを呼び出す場合は、GetPropertiesメソッドと同様にパラメーターにBindingFlags列挙型の値を指定します。

サンプルプログラム

サンプルとしてWindowsフォームアプリケーションで、指定された文字列からオブジェクトの型(Type)を取得してプロパティの一覧を取得し、プロパティ名を表示するプログラムを作成します。

ユーザーインターフェース

Visual StudioでWindowsフォームアプリケーションのプロジェクトを作成し、フォームに型名を入力するテキストボックス(textBox1)と、プロパティの一覧を取得して、名前を表示するボタン(button1)と、プロパティ名の一覧を表示するテキストボックス(textBox2)を配置します。

リフレクションを使用してオブジェクトのプロパティの一覧を取得するサンプルフォームのデザイン

ソースコード

ボタンクリック時のイベント処理(オブジェクトのプロパティの一覧を表示する処理)を記述します。

プログラムの実行

プロジェクトをビルドして実行(デバッグ)します。

リフレクションを使用してオブジェクトのプロパティの一覧を取得するサンプルフォーム

オブジェクトのタイプ名をテキストボックスに入力します。

リフレクションを使用してオブジェクトのプロパティの一覧を取得するサンプルフォームにタイプ名を入力
ここではタイプ名に「System.String」を入力しています。

ボタンをクリックします。

リフレクションを使用してオブジェクトのプロパティの一覧を取得するサンプルフォームでSystem.Stringのプロパティの一覧を取得して表示

プロパティの一覧が取得されてテキストボックスに表示されます。

参考 Reflection Tips
.NET Reflection(リフレクション)Tips コードスニペット一覧 [C#]
.NETのReflection(リフレクション)を使ったTipsのコードスニペット集です。 本記事に記載のコードでは、以下のu...