原創(chuàng)|其它|編輯:郝浩|2009-03-09 13:40:07.000|閱讀 314 次
概述:Optional and named parameters特性在有些場合提供很大的方便,特別是Office開發(fā)中可以告別一坨System.Reflection.Missing了。這里簡單了解一下C#4.0中的Optional and named parameters。 在VS2010 CTP中的C#4.0編譯器調(diào)試通過,正式版可能會有些變化。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Optional and named parameters特性在有些場合提供很大的方便,特別是Office開發(fā)中可以告別一坨System.Reflection.Missing了。這里簡單了解一下C#4.0中的Optional and named parameters。
在VS2010 CTP中的C#4.0編譯器調(diào)試通過,正式版可能會有些變化。
1.使用示例
運行結(jié)果為:
使用中的注意事項:
當必選參數(shù)與可選參數(shù)在同一個方法中混合使用時,必選參數(shù)的聲明應該放在可選參數(shù)的前面。
可選參數(shù)的初始值必須是一個在編譯期可確定的常量。
可選參數(shù)不可用ref,out等修飾符。
如果全部顯式指定參數(shù)名(paraName:value),參數(shù)的順序可以任意調(diào)整。
2.內(nèi)部實現(xiàn)
ILDASM反編譯一下Test.OptionalAndNamedParams,代碼段為:
可選參數(shù)前聲明為OptionalAttribute特性。這是C#4.0的語法糖。
Test.OptionalAndNamedParams方法等價的代碼為:
如果不用DefaultParameterValueAttribute特性設(shè)置默認值,則輸出為:
現(xiàn)在知道了Office開發(fā)中Missing的原因了。
OptionalAttribute和DefaultParameterValueAttribute不是FCL的新類,他們把方法的參數(shù)聲明為可選方法和指定默認值,以便被支持可選參數(shù)和默認參數(shù)的語言調(diào)用(如VB、VC++等)。
3.調(diào)用過程
Main方法中,調(diào)用t.OptionalAndNamedParams(1)的IL代碼為(Release模式編譯):
可以看到,編譯器先取得可選參數(shù)的默認值,然后像常規(guī)方法一樣調(diào)用,并不是后期邦定,這在程序集版本控制時應加以注意,更新了應用程序中含有可選參數(shù)方法的程序集后,可能由于默認值的改變導致程序行為異常。
4.方法重載
可選參數(shù)與方法重載時,方法的調(diào)用方式一模一樣,到底調(diào)用的哪個可以舉個例子:
在上面的Test類添加一個方法,定義為:
輸出結(jié)果變成:
可以看出,首先調(diào)用參數(shù)完全匹配的方法。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:博客園