有誰知道或關心推測為什么隱式類型僅限于局部變量?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 關注
- 502 瀏覽
添加回答
舉報
0/150
提交
取消