在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Abstract
void Process(Employee employee, bool bonus = false)
a.Process(employee, true);
a.Process(employee);
在第二種情況下,多出來的參數將被設定為false。 但C#並沒有這個功能。 C# team沒提供此功能的其中一個原因,是因為牽涉到對default value的實做因素。在C++的世界,當用戶寫
a.Process(employee);
a.process(employee, false);
void Process(Employee employee, bool bonus = false);
void Process(Employee employee, bool bonus = true);
在這方面,使用overload方式較適當。Framework作者只需定義兩個分開的method,單一參數的method去呼叫兩個參數的method即可解決。這種方式將default value封裝在framework內,若有需要則可立即修改。(譯註:若用這種方式,就算.NET Framework 2.0和.NET Framework 1.0的default value不一樣,用戶也不需重新compile代碼。) 或許可以用一些compiler的技巧,讓語法如C++一樣,然後自動產生overload,但這種方式有一些問題。 第一個問題是,用戶寫出的代碼和compiler編譯出來的MSIL將有很大的差異,一般來說,我們會盡量減少這種狀況,因為這將造成程序員閱讀MSIL困難。(譯註:這就是所謂的Syntax Sugar(語法甜頭),大部分的人是不會去研究C#和MSIL的差異,也不會去閱讀MSIL,但有些人或許會需要研究MSIL,一般來說,少用compiler技巧是對的)。第二個問題是,必須面臨如何產生XML文件註解和如何顯示intellisense。compiler必須有特殊的規則來來為這些overload method產生XML文件註解,且intellisense必須夠聰明為一個單一method展開overload method。(譯註:VB.NET,C++/CLI都可以解決這些問題,所以我覺得這個是C# team的懶惰,呵呵)。 自己撰寫overload method雖然較麻煩,但C# team認為是可以接受的方式。 Conclusion 1.Lib/Framwork若有改變,用戶代碼需重新compile。 1是很嚴重的問題沒錯,但2就還好,反正C#的syntax sugar已經用的很兇,如delegate,所以又多一個syntax sugar也不嫌多。但3就真的是藉口了。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论