1

var の使用はローカル変数に対してのみ実行できるため、実行できないことはわかっています。C#チームがなぜそうあるべきだと考えたのか、誰かが理論を持っているかどうか疑問に思っています。たとえば、これの何が問題になるでしょうか:

public class SomeClass
{
    var someString = "hello"; //not cool
    public SomeClass()
    {
        var someOtherString = "hello"; //cool
    }
}

が初期化されている場合someString、明らかに のような文字列ですsomeOtherString。ローカル変数に 1 つのルールがあり、グローバル変数に別のルールがあるのはなぜですか?

4

2 に答える 2

4

重複、したがって CW。

Eric Lippertの投稿を参照してください。

C# コンパイラのしくみを単純化しすぎた簡単な説明をしましょう。まず、すべてのソース ファイルを調べて、「トップ レベルのみ」の解析を行います。つまり、ネストのすべてのレベルで、すべての名前空間、クラス、構造体、列挙型、インターフェイス、およびデリゲートの型宣言を識別します。すべてのフィールド宣言、メソッド宣言などを解析します。実際、メソッド本体を除くすべてを解析します。それらはスキップして後で戻ってきます。
[...]
「var」フィールドがある場合、フィールドのタイプは、式が分析されるまで決定できません。これは、フィールドのタイプを知る必要がある後に発生します。

于 2010-04-08T09:00:45.723 に答える
1

これは、コンパイラが型を解決するために必要な検索の量と関係があります。

于 2010-04-08T09:02:12.943 に答える