亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

隱式打字;為什么只是局部變量?

隱式打字;為什么只是局部變量?

慕容森 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 關注
  • 502 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號