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

隐式打字;为什么只是局部变量?

隐式打字;为什么只是局部变量?

慕容森 2019-12-06 15:02:40
有谁知道或关心推测为什么隐式类型仅限于局部变量?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这样的动态语言


查看完整回答
反对 回复 2019-12-06
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

本质上,您遇到的问题是C#(到目前为止)是一种静态类型的语言。定义为var的局部变量仍然是静态类型,但在语法上是隐藏的。另一方面,返回var的方法有很多含义。它更多地是一个使用接口,使用var不会获得任何好处。


查看完整回答
反对 回复 2019-12-06
  • 3 回答
  • 0 关注
  • 457 浏览

添加回答

举报

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