C#におけるリフレクションの活用方法とは?主な用途と実装例を解説
リフレクション(Reflection)は、プログラムの実行時に型情報を動的に取得するための仕組みです。実行中のプログラムのメタデータにアクセスするためのクラスは、System.Reflection 名前空間に用意されています。
リフレクションの主な用途
- 属性(Attribute)の情報を実行時に参照・確認できる。
- アセンブリ内に含まれるさまざまな型を調査し、それらのインスタンスを動的に生成できる。
- メソッドやプロパティへの遅延バインディング(Late Binding)が可能になる。
- 実行時に新しい型を作成し、その型を利用して各種処理を実行できる。
System.Reflection 名前空間には、アプリケーションに関する情報を取得したり、型・値・オブジェクトを動的に追加したりするためのクラスが含まれています。
基本的な使い方
対象となるクラスの情報を取得するには、以下のように typeof を使って MemberInfo オブジェクトを生成します。
System.Reflection.MemberInfo info = typeof(MyClass);
サンプルコード
ここでは、カスタム属性「HelpAttribute」を定義し、 MyClass クラスに適用した上で、リフレクションを使ってその属性情報を取得する例を紹介します。
using System;
using System.Reflection;
[AttributeUsage(AttributeTargets.All)]
public class HelpAttribute : System.Attribute {
public readonly string Url;
public string Topic {
get {
return topic;
}
set {
topic = value;
}
}
public HelpAttribute(string url) { // url は位置指定パラメータ
this.Url = url;
}
private string topic;
}
[HelpAttribute("Information on the class MyClass")]
class MyClass {
}
namespace AttributeAppl {
class Program {
static void Main(string[] args) {
System.Reflection.MemberInfo info = typeof(MyClass);
object[] attributes = info.GetCustomAttributes(true);
for (int i = 0; i < attributes.Length; i++) {
System.Console.WriteLine(attributes[i]);
}
Console.ReadKey();
}
}
}実行結果
HelpAttribute
このように、GetCustomAttributes メソッドを使用することで、クラスに適用された属性を簡単に取得できます。リフレクションを活用すれば、プラグイン機構の実装やシリアライズ処理、DIコンテナのような柔軟な設計も可能になります。
-
C言語のトークンとは?6つの種類とサンプルコードでわかりやすく解説
トークンとはトークン(token)とは、コンパイラにとって意味を持つ、プログラムを構成する最小単位のことです。コンパイラはソースコードをこの最小単位へと分割し、生成されたトークンを基にコンパイルの各段階へと処理を進めていきます。トークンの種類C言語のトークンは、主に以下の6種類に分類されます。キーワード(予約語):int、return など、言語仕様によって意味が定められた語識別子:変数名や関数名など、開発者が自由に命名できる名前定数:10、3.14 など、プログラム中で値が変わらない固定値文字列:ダブルクォート( )で囲まれた文字の並び特殊記号:{ }、( )、; など、構文を区切るための記
-
C#のカスタム例外とは?ユーザー定義例外の作成方法を実例で解説
他のプログラミング言語と同様に、C#でも独自の例外クラス(ユーザー定義例外)を簡単に作成できます。ユーザー定義例外クラスは、標準ライブラリの Exception クラスを継承して定義します。このように開発者が独自に定義した例外のことをカスタム例外と呼びます。カスタム例外が必要な理由.NETには数多くの組み込み例外(NullReferenceException や ArgumentException など)が用意されていますが、アプリケーション固有のエラー状態を表現したい場合には、カスタム例外を作成するのが適切です。たとえば「温度がゼロであること」をエラーとして扱いたい場合など、ビジネスロジック