リフレクションは、他の方法では実際に実行できないことを実現できます。
たとえば、このコードを最適化する方法を検討してください。
int PoorHash(char Operator, int seed, IEnumerable<int> values) {
foreach (var v in values) {
seed += 1;
switch (char) {
case '+': seed += v; break;
case '^': seed ^= v; break;
case '-': seed -= v; break;
...
}
seed *= 3;
}
return seed;
}
内側のループの真ん中に高価なテストスマックがありますが、それを抽出するには、各演算子に対してループを1回書き換える必要があります。Reflectionを使用すると、ループを数十回繰り返すことなく、テストを抽出するのと同等のパフォーマンスを得ることができます(したがって、保守性が犠牲になります)。必要なループをその場で生成してコンパイルするだけです。
私は実際にこの最適化を行いましたが、状況はもう少し複雑で、結果は驚くべきものでした。パフォーマンスが大幅に向上し、コードの行数が少なくなりました。
(注:最初はcharではなくFuncを渡すのと同等の方法を試しましたが、わずかに改善されましたが、10倍の反射はほとんど達成されませんでした。)