有谁知道或关心推测为什么隐式类型仅限于局部变量?var thingy = new Foo();但是为什么不...var getFoo() { return new Foo(); }
3 回答
明月笑刀无情
TA贡献1828条经验 获得超4个赞
我认为它没有明确回答这个问题。
为什么不?
var getFoo() {
return new Foo();
}
原因是:
如果?
class Foo {}
var GetFoo() {
return GetBar();
}
var GetBar() {
return GetBaz();
}
var GetBaz() {
return new Foo();
}
您可以推断出GetFoo将要返回的内容Foo,但是您将不得不跟踪该方法及其子对象进行的所有调用,以推断类型。就目前而言,C#编译器并非旨在以这种方式工作。在推断类型的代码可以运行之前,它在过程的早期需要方法和字段类型。
在纯粹的美学层面上,我发现方法的var定义使事情变得混乱。我认为明确表示总是有帮助的,它会意外返回导致签名和其他相关方法签名发生变化的类型,从而保护您免受脚伤。更糟糕的是,如果您返回一个返回对象的方法的值并且碰巧很幸运,那么您甚至有可能不知道自己就改变了方法链的所有签名。
我认为var方法最适合像Ruby这样的动态语言
扬帆大鱼
TA贡献1799条经验 获得超9个赞
本质上,您遇到的问题是C#(到目前为止)是一种静态类型的语言。定义为var的局部变量仍然是静态类型,但在语法上是隐藏的。另一方面,返回var的方法有很多含义。它更多地是一个使用接口,使用var不会获得任何好处。
- 3 回答
- 0 关注
- 451 浏览
添加回答
举报
0/150
提交
取消