3 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊
我認(rèn)為它沒有明確回答這個(gè)問題。
為什么不?
var getFoo() {
? ? return new Foo();?
}
原因是:
如果?
class Foo {}
var GetFoo() {
? ?return GetBar();?
}
var GetBar() {
? return GetBaz();?
}
var GetBaz() {
? ?return new Foo();
}
您可以推斷出GetFoo將要返回的內(nèi)容Foo,但是您將不得不跟蹤該方法及其子對象進(jìn)行的所有調(diào)用,以推斷類型。就目前而言,C#編譯器并非旨在以這種方式工作。在推斷類型的代碼可以運(yùn)行之前,它在過程的早期需要方法和字段類型。
在純粹的美學(xué)層面上,我發(fā)現(xiàn)方法的var定義使事情變得混亂。我認(rèn)為明確表示總是有幫助的,它會意外返回導(dǎo)致簽名和其他相關(guān)方法簽名發(fā)生變化的類型,從而保護(hù)您免受腳傷。更糟糕的是,如果您返回一個(gè)返回對象的方法的值并且碰巧很幸運(yùn),那么您甚至有可能不知道自己就改變了方法鏈的所有簽名。
我認(rèn)為var方法最適合像Ruby這樣的動(dòng)態(tài)語言

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊
本質(zhì)上,您遇到的問題是C#(到目前為止)是一種靜態(tài)類型的語言。定義為var的局部變量仍然是靜態(tài)類型,但在語法上是隱藏的。另一方面,返回var的方法有很多含義。它更多地是一個(gè)使用接口,使用var不會獲得任何好處。
- 3 回答
- 0 關(guān)注
- 512 瀏覽
添加回答
舉報(bào)