したがって、.NET では、プロパティの値を取得する方が、フィールドの値よりもコストがかかることがわかっています。ただし、プロパティのゲッターに何らかのロジックが含まれている場合に限ります。私の質問は、二重のようなものです。次の例を検討してください。
foreach(var item in collection)
{
item.SomeField = StaticClass.PropertyA.PropertyB.PropertyC;
}
したがって、(うまくいけば明らかに)StaticClass
は静的クラスであり、その右側にあるすべてのプロパティは、何らかのクラスのインスタンスです。さらに、すべてのプロパティは純粋にフィールドのラッパーであり、PropertyA
フィールドを返すだけのゲッターと、そのフィールドに割り当てるセッターなどがあります。
この実行をステップ実行すると、値を取得するために 3 つのメソッド呼び出しを行う必要があることがわかります ( get_PropertyA()
、get_PropertyB()
、get_PropertyC()
)。私が持っている最初の質問は次のとおりです。
コンパイラは、この展開を最適化して、これら 3 つのメソッド呼び出しを 1 回だけ評価する (つまり、本体をインライン化する) か? それとも、反復ごとに 3 つのメソッド呼び出しを行うのでしょうか?
私は後者が真実であると信じるようになります。
さらに、この特定のコードがアプリケーション全体で頻繁に使用されているとします。PropertyC
後者の場合、ループに入る前に の値をローカル変数に格納し、そのローカル変数をループ内で使用して、メソッド自体を最適化しようとするのは理にかなっていますか?
前もって感謝します。この質問は議論の側面に傾いていますが、決定的な答えがあると確信しています.