【C#】リフレクションの基礎と実用例

この資料は、C#におけるリフレクションの基礎的な概念を理解し、初学者向けに簡単なサンプルコードを通じてリフレクションの実用例を示すことを目的としています。

リフレクションとは?

リフレクション(Reflection)とは、プログラム実行時にオブジェクトの型情報(クラス、メソッド、プロパティなど)にアクセスし、それを操作する技術です。C#では、System.Reflection名前空間を使用してリフレクションを実現します。

リフレクションの用途

リフレクションは以下のような場面で使用されます:

  • 実行時に型の情報を動的に取得する。
  • メソッドやプロパティにアクセスし、実行時にその値を取得または変更する。
  • カスタム属性やメタデータを取得する。

リフレクションの基本サンプルコード

次のサンプルコードでは、Personというシンプルなクラスを定義し、リフレクションを使ってそのクラスのプロパティ情報を取得し、値を表示します。

using System;
using System.Reflection;

namespace ReflectionSample
{
    // サンプルクラス
    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // Personクラスのインスタンスを作成
            Person person = new Person { Name = "John Doe", Age = 30 };

            // リフレクションを使用してプロパティを取得
            Type type = typeof(Person);
            PropertyInfo[] properties = type.GetProperties();

            // プロパティ情報を表示
            Console.WriteLine("Personクラスのプロパティ:");
            foreach (var prop in properties)
            {
                // プロパティ名と値を表示
                Console.WriteLine($"{prop.Name}: {prop.GetValue(person)}");
            }
        }
    }
}

コードの説明

  1. Personクラスの定義:
    • NameAgeという2つのプロパティを持つクラスです。
  2. Typeオブジェクトの取得:
    • typeof(Person)を使って、Personクラスの型情報(Typeオブジェクト)を取得します。
  3. プロパティ情報の取得:
    • GetProperties()メソッドを使って、Personクラスに含まれるすべてのプロパティ情報を取得します。
  4. プロパティ名と値の表示:
    • 取得したプロパティ情報を使い、プロパティ名と値をコンソールに表示します。prop.GetValue(person)で指定したプロパティの値を動的に取得しています。

実行結果

このコードを実行すると、以下のような結果がコンソールに表示されます。

Personクラスのプロパティ:
Name: John Doe
Age: 30

リフレクションの具体的な使用ケース

リフレクションは、以下のような具体的なケースで使用されます:

  1. プラグインやモジュールのロード
    • 外部のアセンブリ(.dllファイル)を動的にロードし、クラスやメソッドを実行します。プラグインアーキテクチャを持つアプリケーションでよく使われます。
  2. オブジェクトのシリアライズとデシリアライズ
    • オブジェクトをJSONやXMLなどに変換する際、リフレクションを使ってクラスのプロパティ情報を取得し、自動的にデータを変換します。
  3. データバインディング
    • UIコントロールとオブジェクトのプロパティをバインディングする際、リフレクションでプロパティ情報を取得し、データを同期します。
  4. テストフレームワーク
    • ユニットテストフレームワークがリフレクションを使ってテストメソッドを検出し、動的に実行します。
  5. ORM(Object-Relational Mapping)ツール
    • データベーステーブルとクラスのプロパティをマッピングする際、リフレクションで情報を取得し、データベース操作を行います。
  6. カスタム属性の取得
    • リフレクションを使って、カスタム属性を持つメソッドやクラスを検出し、実行時に特定の処理を行います。
  7. アプリケーションの自動テスト
    • テストコードで、リフレクションを使ってプライベートメソッドやフィールドにアクセスし、その動作を検証することができます。

結論

リフレクションは、動的に型情報を取得し操作するための強力なツールです。実行時にオブジェクトのプロパティやメソッドを操作する必要がある場合に非常に有用です。この資料で紹介した具体例を通じて、リフレクションの応用範囲を理解し、実際の開発に活用することができます。

C#

Posted by hidepon