2011-07-18 8 views
5

C#4では、beforefieldinitフラグのない型の動作が変更されたため、型初期化子はクラスの静的フィールドを最初に使用する前に呼び出すことができます。.NET 4でBeforeFieldInitビヘイビアが変更されたのはなぜですか?

私の質問は、C#/ .NETチームがその動作を変更した理由です。主な理由は何ですか?この変更が意味を成す実践的な例を見せてもらえますか?

+0

を参照してください。あなたはこれをどこで読んだのですか? – leppie

+1

私はここでそれを読む:[リンク](http://msmvps.com/blogs/jon_skeet/archive/2010/01/26/type-in​​itialization-changes-in-net-4-0.aspx)そして私の意見主な理由は拡張メソッドの性能ですか?どう思いますか? –

+1

無関係。これらのことは理由があるために文書化されていません。 –

答えて

11

行動は常にを文書化しているものの範囲内となっている - それは私はそれが.NETで怠惰に熱心であることから、4

を変更したことだけだ容疑者 JITチームがへの道を見つけることができましたパフォーマンスペナルティなしでそれを怠惰にするか、おそらくそれは他のどこかのパフォーマンスを助けます。これはの.NET 4 CLRと.NET 2 CLRの間での動作の変化などです。気づいたことが起こりましたが、他の多くの人がこれを実行したとは思えません。私はJITチームが文書化された保証の範囲内で適切なものを調整することはまったく妥当だと考えています。

最終的に、これによってコードが失敗すると、既にバグがあります。

+0

あなたの答えをありがとう!どのようにJITコンパイラコールタイプのイニシャライザを知っていますか?その型のinitialazerの呼び出しでメソッドを2回コンパイルするかどうか?最初の呼び出しの前にメソッドが実行されている間にパフォーマンスが不足していますが、メソッドの2番目の呼び出しには正常なパフォーマンスがあります。 –

+0

@スメリ:正直言ってわかりません。私は何らかのサンクが起こることを期待していますが、私はいつもJITチームに詳細を残しました:) –

関連する問題