猿问

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

有谁知道或关心推测为什么隐式类型仅限于局部变量?


var thingy = new Foo();

但是为什么不...


var getFoo() {

    return new Foo(); 

}


慕容森
浏览 458回答 3
3回答

明月笑刀无情

我认为它没有明确回答这个问题。为什么不?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这样的动态语言

扬帆大鱼

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