为了账号安全,请及时绑定邮箱和手机立即绑定

为什么类字段不能为var?

为什么类字段不能为var?

C#
喵喔喔 2019-11-04 09:48:08
class A{    A()    {        var x = 5;   // this is allowed    }    var _x = 5;   // the compiler is unhappy}我猜编译器必须能够像为本地变量一样推导成员变量的类型。那有什么区别呢?
查看完整描述

3 回答

?
弑天下

TA贡献1818条经验 获得超8个赞


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


查看完整回答
反对 回复 2019-11-04
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

所述var关键字被设计用于匿名类型,只能在方法的内部使用。

如果编译以下内容,将会发生什么:


class A {

    public readonly var value = B.value;

}


class B {

    public readonly var value = B.value;

}

由于局部变量无法在定义之前被引用,因此无法使用局部变量重新创建这种情况。


这里的一般问题是,您要让编译器在仍然生成类型信息的同时使用类型信息。


查看完整回答
反对 回复 2019-11-04
?
白板的微信

TA贡献1883条经验 获得超3个赞

我看到两个原因:

  1. 可能希望在公共接口中显式声明类型

  2. 很难实现。C#编译器分多个阶段进行编译。
    首先,它解析除方法主体之外的所有内容,因此它了解函数主体以外的所有内容。然后,它可以使用该信息分别编译方法主体。编译一个方法主体时发生的情况对编译其他方法主体时发生的影响不大。
    如果您可以将var字段用于字段,则字段初始值设定项的表达式主体将影响字段的类型,从而影响许多其他方法。因此,它不太适合编译器设计。


查看完整回答
反对 回复 2019-11-04
  • 3 回答
  • 0 关注
  • 504 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信