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

C#でリフレクションを使ってプロパティ値を動的に取得する方法

C#ではリフレクション(Reflection)を活用することで、プロパティの値を動的に取得できます。

リフレクションは、アセンブリ・モジュール・型を記述するオブジェクト(Type型)を提供します。これにより、実行時に型のインスタンスを動的に生成したり、既存のオブジェクトから型情報を取得してメソッドを呼び出したり、フィールドやプロパティへアクセスしたりすることが可能になります。さらに、コード内で属性(Attribute)を使用している場合も、リフレクション経由でそれらにアクセスできます。

.NETのリフレクションにおいて中心的な役割を担うのが、System.Reflection名前空間System.Typeクラスです。この2つが連携することで、型に関するさまざまな情報を実行時に調べることができます。

コード例

using System;
using System.Text;
    namespace DemoApplication {
        public class Program {
            static void Main(string[] args) {
                var employeeType = typeof(Employee);
                var employee = Activator.CreateInstance(employeeType);
                SetPropertyValue(employeeType, "EmployeeId", employee, 1);
                SetPropertyValue(employeeType, "EmployeeName", employee, "Mark");
                GetPropertyValue(employeeType, "EmployeeId", employee);
                GetPropertyValue(employeeType, "EmployeeName", employee);
                Console.ReadLine();
            }
            static void SetPropertyValue(Type type, string propertyName, object instanceObject, object value) {
                type.GetProperty(propertyName).SetValue(instanceObject, value);
            }
            static void GetPropertyValue(Type type, string propertyName, object instanceObject) {
                Console.WriteLine($"Value of Property {propertyName}: {type.GetProperty(propertyName).GetValue(instanceObject, null)}");
            }
        }
        public class Employee {
            public int EmployeeId { get; set; }
            public string EmployeeName { get; set; }
        }
    }

実行結果

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

Value of Property EmployeeId: 1
Value of Property EmployeeName: Mark

この例では、typeof()でEmployeeクラスの型情報を取得し、その型とプロパティ名をもとに、リフレクションによって各プロパティ値が設定されています。同様に値を取得する際には、GetProperty()メソッドで対象のプロパティ情報を取得し、GetValue()を呼び出しています。この仕組みを利用すれば、実行時に任意のプロパティの値を動的に読み書きできます。

実装時の注意点

  • 指定した名前のプロパティが存在しない場合、GetProperty()nullを返すため、実際の開発ではnullチェックを行うのが安全です。
  • リフレクションは通常の直接アクセスよりも処理速度が遅いため、ループ内など高頻度で呼び出す場面ではパフォーマンスへの配慮が必要です。
  1. JavaScriptでCSSプロパティの現在の値を取得する方法|getComputedStyleの使い方

    JavaScriptでHTML要素に適用されているCSSプロパティの現在の値(計算済みスタイル)を取得するには、window.getComputedStyle()メソッドを使用します。このメソッドは、対象の要素に適用されたすべてのスタイル情報を含むオブジェクトを返します。返されたオブジェクトに対してgetPropertyValue()メソッドを呼び出せば、任意のCSSプロパティの値を文字列として取得できます。インラインスタイルが設定されていない場合でも、外部CSSや継承によって最終的に適用されている値を取得できるのが大きな特徴です。基本構文const element = document.qu

  2. Redis TYPEコマンドの使い方 – キーに格納された値のデータ型を取得する方法

    このチュートリアルでは、Redisのキーに格納された値のデータ型を取得する方法について解説します。Redisのデータストアでは、値はString(文字列)、List(リスト)、Set(セット)、Sorted Set(ソート済みセット)、Hash(ハッシュ)など、さまざまなデータ型を持つことができます。値のデータ型を確認したい場合は、redis-cliでTYPEコマンドを使用します。 TYPEコマンドの構文 TYPEコマンドの基本的な構文は以下のとおりです。 redis host:port> TYPE <key name> 出力結果 TYPEコマンドを実行すると、次のいずれかの