編輯1:我知道有替代方法,如伸縮,這是一個純粹的教育問題。爲什麼默認的方法參數必須是C#編譯時常量
我知道這是真的,但爲什麼它一定是?這似乎是像這樣的東西:
public class Foo{
private int bar;
public void SetBar(int baz = ThatOtherClass.GetBaz(3)){
this.bar = baz;
}
}
編譯器可以在方法改變這樣的事情:
public void SetBar(int baz){
//if baz wasn't passed:
baz = ThatOtherClass.GetBaz(3);
this.bar = baz;
}
爲什麼不這項工作,或者將它,它只是一個設計決策?
因爲在運行時值和編譯時值之間可能存在差異。如果編碼器需要編譯時間值「硬編碼」,那麼GetBaz()會在運行時返回完全不同的內容並引發程序出錯? – 2014-10-07 18:42:44
如果您想知道爲什麼C#語言團隊沒有實現某個功能,請向他們詢問,而不是與語言創建無關的隨機開發人員。我們無法知道他們爲什麼選擇不實施此功能。 – Servy 2014-10-07 18:42:55
你總是有方法重載的選項 – 2014-10-07 18:43:52