2010-04-08 85 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

它与搜索编译器将要做的事情的数量做解决的类型。

相关问题