.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 : 53
Users Yesterday : 65
Users Last 7 days : 340
Users Last 30 days : 1390
Users This Month : 1341
Users This Year : 1341
Total Users : 95856
Views Today : 59
Views Yesterday : 76
Views Last 7 days : 418
Views Last 30 days : 1596
Views This Month : 1544
Views This Year : 1544
Total views : 133990
Who's Online : 1