2017-01-08 7 views
0

Reflection in .NET(c#)の経験はほとんどありませんが、使用するには最良の方法を試しています。私の理解はパフォーマンス上の懸念から最小限に、そしてより低いレベルのライブラリ内で使用するのが最善であるということです。これは本当ですか、そうでない場合は、なぜですか?リフレクション(C#)を使用する最適な抽象レベルはどれくらいですか?

+1

私の意見では(これはスタックオーバーフローに関するトピック上の質問ではありません)、パフォーマンスは副次的なものです。つまり、言語があなたに提供するすべての型の安全性を失うということです。低レベルのライブラリだけでなく、あらゆるレベルでリフレクションを見つけることができます。 – Rob

+0

リフレクションは、インテリセンスがうまくいかない場合、型チェックを回避し、プライベートメソッド、変数へのアクセスなどのOOP原則を破っています。それは直接的なアプローチよりも遅いですが、システムが複雑すぎると、制御が逆転する場合には実質的に役立ちますが、そこでさえ避けることができるアーキテクチャが重要なユースケースがあります。リファクタリング中に壊れたり、ビルド時にスレッドの安全性チェックが行われません。実際に必要なときや実質的に人生を単純化するときに使用します。 – ipavlu

答えて

0

リフレクションは、リフレクションを使用していないほど速くないため、通常は「遅い」プロセスであり、より伝統的な手段で回避できる場合にリフレクションを乱用することはお勧めしません。

ほとんどの人は、それは多くの場合、十分に速く解決策である、と言うだろうといくつかの類似した質問がherehere

です。ユースケースが遅すぎるのか、不要かを判断するには、パフォーマンステストを実行する必要があります。

どこで使用するかは本当に重要だとは言いませんが、ビューモデルやASP.NETコントローラで悪用することは、一般的にUIに関連する懸念があるため意味がないかもしれません。しかし、再度、反映が必要な場合についてケースバイケースの決定であるため、本当にあなたは裁判官である必要があります。リフレクションは、下位レベルのライブラリでのみ使用する必要があるという厳しい規則はありません。

リフレクションは多くの問題を解決することができますが、それが最も簡単な解決策であれば、コードをテストしてください。リフレクションが遅くなったら、リファクタリングして他のものを試してみてください。

+1

ありがとう、これは役立ちます。これは重複と見なすことができるため、それをそのようにマークすることはできますか? – ryanwebjackson

+0

@ryanwebjackson私はそれを重複としてフラグを立てた。レビュー中です。 – Carson

+0

@ryanwebjacksonすぐにそれを適用するために提案された複製を受け入れるためのボタンが必要です - 同じ質問があると感じたら – Rob

関連する問題