为什么类字段不能为var?

class A

{

    A()

    {

        var x = 5;   // this is allowed

    }


    var _x = 5;   // the compiler is unhappy

}

我猜编译器必须能够像为本地变量一样推导成员变量的类型。那有什么区别呢?


喵喔喔
浏览 505回答 3
3回答

弑天下

基本上,一般情况下,它需要重新编写C#编译器,因为它目前并类型推断不会为周期的工作方式var字段变量赋值。

叮当猫咪

所述var关键字被设计用于匿名类型,只能在方法的内部使用。如果编译以下内容,将会发生什么:class A {    public readonly var value = B.value;}class B {    public readonly var value = B.value;}由于局部变量无法在定义之前被引用,因此无法使用局部变量重新创建这种情况。这里的一般问题是,您要让编译器在仍然生成类型信息的同时使用类型信息。

白板的微信

我看到两个原因:可能希望在公共接口中显式声明类型很难实现。C#编译器分多个阶段进行编译。首先,它解析除方法主体之外的所有内容,因此它了解函数主体以外的所有内容。然后,它可以使用该信息分别编译方法主体。编译一个方法主体时发生的情况对编译其他方法主体时发生的影响不大。如果您可以将var字段用于字段,则字段初始值设定项的表达式主体将影响字段的类型,从而影响许多其他方法。因此,它不太适合编译器设计。
打开App,查看更多内容
随时随地看视频慕课网APP