C#のリフレクションでメソッドとプロパティを一覧表示する方法
リフレクション(Reflection)とは、コード内に存在する型、メソッド、フィールドなどのメタデータを記述し、実行時に動的に取得・操作するための仕組みです。System.Reflection名前空間を利用することで、読み込まれたアセンブリや、その中に含まれるクラス、メソッド、値型といった要素に関する情報をプログラムから参照できるようになります。
System.Reflectionの主なクラス
System.Reflectionには多数のクラスが用意されていますが、特によく使用されるのは以下の通りです。
- Assembly … アセンブリ自体の情報を表す
- AssemblyName … アセンブリの識別情報を表す
- ConstructorInfo … コンストラクターの情報を表す
- MethodInfo … メソッドの情報を表す
- ParameterInfo … パラメーターの情報を表す
- EventInfo … イベントの情報を表す
- PropertyInfo … プロパティの情報を表す
- MemberInfo … メンバー全般の共通情報を表す
サンプルコード
次の例では、typeof(TextInfo)からTypeInfoを取得し、DeclaredPropertiesとDeclaredMethodsを使って、その型が宣言しているすべてのプロパティとメソッドの名前を一覧表示しています。
static void Main(string[] args){
TypeInfo myType = typeof(TextInfo).GetTypeInfo();
IEnumerable<PropertyInfo> properties = myType.DeclaredProperties;
IEnumerable<MethodInfo> methods = myType.DeclaredMethods;
Console.WriteLine(myType);
Console.WriteLine(properties);
Console.WriteLine(methods);
StringBuilder strBuilder = new StringBuilder();
Console.WriteLine();
strBuilder.Append("The properties are:");
foreach (PropertyInfo p in properties){
strBuilder.Append("\n" + p.Name);
}
strBuilder.Append("\n");
strBuilder.Append("\nThe methods are:");
foreach (MethodInfo m in methods){
strBuilder.Append("\n" + m.Name);
}
Console.WriteLine(strBuilder);
}
実行結果
System.Globalization.TextInfo System.Reflection.PropertyInfo[] System.Reflection.MethodInfo[] The properties are: Invariant ANSICodePage OEMCodePage MacCodePage EBCDICCodePage LCID CultureName IsReadOnly ListSeparator IsAsciiCasingSameAsInvariant IsRightToLeft The methods are: get_Invariant get_ANSICodePage get_OEMCodePage get_MacCodePage get_EBCDICCodePage get_LCID get_CultureName get_IsReadOnly get_ListSeparator set_ListSeparator get_IsAsciiCasingSameAsInvariant get_IsRightToLeft System.Runtime.Serialization.IDeserializationCallback.OnDeserialization Clone ReadOnly VerifyWritable SetReadOnlyState ToLower ToLower ChangeCase ChangeCaseToLower ChangeCaseToUpper ChangeCaseCommon ChangeCaseCommon ChangeCaseCommon ToLowerAsciiInvariant ToLowerAsciiInvariant ToUpperAsciiInvariant ToUpperAsciiInvariant ToLowerAsciiInvariant ToUpper ToUpper ToUpperAsciiInvariant IsAscii PopulateIsAsciiCasingSameAsInvariant Equals GetHashCode ToString ToTitleCase AddNonLetter AddTitlecaseLetter IsWordSeparator IsLetterCategory FinishInitialization ChangeCase IsInvariantLocale
コードのポイント
GetTypeInfo()メソッドを使うことで、型からTypeInfoオブジェクトを取得できます。DeclaredPropertiesは、その型自身で宣言されたプロパティのコレクションを返します。DeclaredMethodsは、その型自身で宣言されたメソッドのコレクションを返します。- 各要素の
Nameプロパティを参照すると、メンバー名を文字列として取得できます。
このようにリフレクションを活用すれば、コンパイル時には未知の型の構造を実行時に調査したり、プラグイン機構、シリアライザー、テストフレームワークなどを柔軟に実装したりすることが可能になります。
-
【入門】PythonとTensorFlowでテンソルを作成し、メッセージを表示する方法
TensorFlowはGoogleが提供する機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせて使用することで、アルゴリズムの実装やディープラーニングアプリケーションの開発など、幅広い用途に活用できます。研究目的から本番環境での運用まで対応しており、複雑な数値計算を高速に実行するための最適化技術も備えています。TensorFlowの特徴TensorFlowはNumPyおよび多次元配列を基盤としています。この多次元配列は「テンソル(tensor)」とも呼ばれます。主な特徴は以下の通りです。ディープニューラルネットワークの構築・学習をサポート高いスケーラビリテ
-
Windows 11を修復する6つの方法|フリーズや不具合を解消する対処法まとめ
Windows 11にアップグレードした後、何らかの問題が発生していませんか?「Windows 11の修復方法を知りたい」とお探しの方は、まさにうってつけの記事です。 システムクラッシュ、アプリが応答しない、いつもより動作が遅いといったトラブルに直面している場合でも、いくつかのトラブルシューティング手法を使えば、PCを素早く修理して、短時間で再び快適に使い始めることができます。 本記事では、Windows 11を修復し、デバイスのパフォーマンスを最適化して、エラーやバグを解消するための6つの方法をご紹介します。 それでは早速見ていきましょう。 Windows 11を修復する方法 方法1:デバ