2010-04-08 83 views
1

我知道它不能完成,因爲使用var只能用於局部變量。我只是想知道,如果有人有理論,爲什麼C#團隊認爲這應該是這樣。例如什麼是不對的:爲什麼C#不允許全局推斷類型,即使用var?

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

如果someString被初始化那麼這顯然是一個字符串,就像someOtherString。爲什麼局部變量和全局變量有一個規則?

+0

可能重複http://stackoverflow.com/questions/2575693/why-it-isnt-possible-to-declare-a-method-parameter-as-var-type – 2010-04-08 09:01:37

+0

多數民衆贊成在方法參數正在變種。對我來說,這是非常明顯的,因爲沒有示例,方法定義如何知道參數是什麼。 – BritishDeveloper 2010-04-08 09:04:10

+0

是的,應該更清楚一點:這是一個不同的問題,但答案相同:成員變量的var是不可能的,因爲編譯器將不得不被顯着改變,並且成本/收益比不足以保證改變。 – 2010-04-08 21:55:14

回答

4

重複,因此CW。

posting by Eric Lippert

讓我給你如何C#編譯器工程的快速過於簡單化。首先,我們遍歷每個源文件並進行「僅頂級」解析。也就是說,我們在所有層次的嵌套中標識每個名稱空間,類,結構,枚舉,接口和委託類型聲明。我們解析所有的字段聲明,方法聲明等等。事實上,我們解析除了方法體之外的所有東西;那些,我們稍後跳過並回來。

如果我們有「var」字段,那麼只有在分析表達式之後才能確定字段的類型,並且在我們已經需要知道字段的類型之後纔會確定該字段的類型。

+1

優秀。爲了清楚起見,我還將添加以下來自該文章的關鍵引用:「字段聲明包含兩個部分:類型聲明和初始化器。將類型與字段名稱相關聯的類型聲明在最初的top-水平分析[...]但初始化實際上被視爲構造函數的一部分「 – BritishDeveloper 2010-04-09 09:11:29

1

它與搜索編譯器將要做的事情的數量做解決的類型。

相關問題