class A{ A() { var x = 5; // this is allowed } var _x = 5; // the compiler is unhappy}我猜编译器必须能够像为本地变量一样推导成员变量的类型。那有什么区别呢?
3 回答
叮当猫咪
TA贡献1776条经验 获得超12个赞
所述var
关键字被设计用于匿名类型,只能在方法的内部使用。
如果编译以下内容,将会发生什么:
class A {
public readonly var value = B.value;
}
class B {
public readonly var value = B.value;
}
由于局部变量无法在定义之前被引用,因此无法使用局部变量重新创建这种情况。
这里的一般问题是,您要让编译器在仍然生成类型信息的同时使用类型信息。
白板的微信
TA贡献1883条经验 获得超3个赞
我看到两个原因:
可能希望在公共接口中显式声明类型
很难实现。C#编译器分多个阶段进行编译。
首先,它解析除方法主体之外的所有内容,因此它了解函数主体以外的所有内容。然后,它可以使用该信息分别编译方法主体。编译一个方法主体时发生的情况对编译其他方法主体时发生的影响不大。
如果您可以将var
字段用于字段,则字段初始值设定项的表达式主体将影响字段的类型,从而影响许多其他方法。因此,它不太适合编译器设计。
- 3 回答
- 0 关注
- 504 浏览
添加回答
举报
0/150
提交
取消