.NETにしろJavaにしろ、リフレクションを使うのは、あまり実行時の効率が良くないのだろうが、呼出回数が多くなければ、それほど気にならない。
私の場合、どんなときに使うかというと、クラスを特定しない、コンバーターライブラリなどに使用している。
例えば、CSVと定義ファイルから、クラスインスタンスにCSVの項目を動的にマッピングさせるライブラリなど。
以下のような感じで使用している。
<!--
マッピング定義
Column -- CSVカラム
Index : カラム位置
MapProperty : 設定するプロパティ名
FuncName : 変換メソッド
-->
<Mapping OutputColumns="5">
<Column Index="0" MapProperty="EmpNo" FuncName="ConvertEmpNo"/>
<Column Index="1" MapProperty="ExecDate" />
・・・
</Mapping>/// <summary>
/// クラスインスタンスへの値セット(Reflection版)
/// </summary>
/// <param name="instance">インスタンス</param>
/// <param name="prop">プロパティ情報</param>
/// <param name="value">値</param>
/// <typeparam name="U">インスタンスの型</typeparam>
public static void SetProp<U>(U instance, string prop, object value) {
var p = typeof(U).GetProperty(prop);
if (p == null) {
throw new ArgumentException($"クラス「{typeof(U).ToString()}」にはプロパティ{prop}が存在しません");
}
p!.SetValue(instance,value);
}ちなみに、FuncNameのメソッドも同様にReflectionを使用して呼び出す。
他にExpressionを使用する方法もあるのだが、式をコンパイルした物をどこかに保存しない場合はReflectionの方がまだ効率が良いかなと・・・
まぁ、データ数がそれほど多くなければ実行速度はあまり気にならない程度。作りやすさや作成時間と実行時間とのトレードオフといったところかな。



Users Today : 0
Users Yesterday : 47
Users Last 7 days : 276
Users Last 30 days : 901
Users This Month : 573
Users This Year : 5687
Total Users : 100202
Views Today :
Views Yesterday : 51
Views Last 7 days : 321
Views Last 30 days : 1059
Views This Month : 657
Views This Year : 6821
Total views : 139267
Who's Online : 0