2012-09-18 74 views
0

可能重复:
Implicit typing; why just local variables?为什么C#不能推断类成员的类型?

C#允许这样的:

public class MyClass 
{ 
    public void Foo() 
    { 
     var q = new MyObject(); 
    } 
} 

但它不会允许这样的:

public class MyClass 
{ 
    var q = new MyObject(); 

    public void Foo() 
    { 
     // ... 
    } 
} 

的是这是为什么?谢谢。

+2

这是一个设计选择。 – Adam

+2

因为没有人编写规范,编码并测试它。 – asawyer

+5

http://blogs.msdn.com/b/ericlippert/archive/2009/01/26/why-no-var-on-fields.aspx – Servy

回答

4

您只能对局部变量使用类型推断。

var keyword推断“在方法范围声明”的变量类型。在语言方面,var用于定义“隐式类型局部变量声明”(C#语言规范8.5.1)。该语言仅对本地变量使用var,而不是类型级变量。至于为什么,这是C#设计者如何使用它的问题。这不是打算推断所有用法的类型,只适用于特定的情况。 Eric Lippert described why this was done,提供了许多潜在的隐患,包括可能公开暴露匿名类型,链接多个初始化程序等。

+0

问题是**为什么**它是这样定义的。 – delnan

+0

那么他们为什么只是为了这个特定的场景,而不是为了另一种场景呢?或者,对他们的大脑缺乏洞察力,你会看到什么原因? – delnan

+1

@delnan我刚刚发布了一些带有一些非常好的见解的链接 - 但它只针对当地人。我怀疑整个原理纯粹是针对LINQ和匿名类型,这两种类型只需要当地人支持就可以工作。扩大使用量会导致大量潜在的隐患(请参阅Eric的文章) –

相关问题