国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

VB.NET是怎樣做到的(七)——可選參數和按名傳遞

2024-07-10 13:01:31
字體:
來源:轉載
供稿:網友
.net blog上最近新貼子的數目有減少的趨勢。我覺得每個人都應該勤快一點,分享自己經驗和想法,別讓這個blog衰落下去。

vb從4.0開始支持“可選參數”這一特性。就是說,函數或子程序的參數有些是可選的,調用的時候可以不輸入。其實vb從1.0開始就有一些函數帶有可選參數,只不過到了4.0才讓用戶自己開發這樣的過程。在vb4里,可選參數可以不帶默認值,而在vb.net里,如果使用可選參數,則必須帶有默認值。如

public sub testoptional(optional i as integer = 1)

end sub

調用的時候,既可以寫成testoptional(2),也可以寫成testoptional(),這種情況參數i自動等于1。如果過程有不止一個可選參數,則vb還提供一種簡化操作的方法——按名傳遞參數。比如過程

public sub testoptional(optional i as int32 = 1, optional j as int32 = 1, optional k as int32 = 1)

end sub

如果只想指定k,讓i和j使用默認值,就可以使用按名傳遞,如下

testoptional(k := 2)

而且這種方式不受參數表順序的限制

testoptional(k := 2, i := 3, j := 5)

這些的確是相當方便的功能,c#就不支持上述兩個特性。我們看看它是怎樣在il級別實現的。上述第一個方法在il中的定義為

.method public instance void testoptional([opt] int32 i) cil managed
{
.param [1] = int32(0x00000001)
.maxstack 8

可見,參數被加上了[opt]修飾符,而且.param指定了參數的默認值。這是只有vb能識別的內容,c#會跳過他們。在調用的時候,vb若發現參數被省略,則自動讀取.param部分的默認值,并顯式傳遞給過程。這一部分完全由編譯器處理,而且沒有任何性能損失,和手工傳遞所有參數是完全一樣的。至于按名傳遞,vb會自動調整參數的順序,其結果與傳統方式的傳遞也沒有任何的不同。這說明我們可以放心地使用這項便利。而且帶有可選參數的過程拿到c#中,頂多變成不可選參數,也不會造成什么其他的麻煩。

ps.很多com組件都使用了默認參數,而且有些過程的參數列表非常長,在vb里可以輕松地處理它們,而在c#中經常讓開發者傳參數傳到吐血

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 盐城市| 怀安县| 万宁市| 车险| 文成县| 南涧| 吐鲁番市| 宣化县| 繁峙县| 巴马| 荥阳市| 青川县| 开远市| 滨海县| 柏乡县| 乐亭县| 滦南县| 防城港市| 水城县| 安化县| 神农架林区| 敖汉旗| 嘉峪关市| 泸水县| 定远县| 江川县| 凤凰县| 五台县| 康平县| 原阳县| 玛沁县| 新疆| 舒兰市| 佛冈县| 中山市| 开原市| 永仁县| 武鸣县| 疏勒县| 信宜市| 江孜县|