最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

__arglist 關(guān)鍵字的用法

2022-09-24 13:59 作者:SunnieShine  | 我要投稿

__arglist 關(guān)鍵字作為 C# 里一個比較隱蔽的知識點(diǎn)(實(shí)際上也確實(shí)基本上用不到),這里為各位作出一個簡要的說明和使用介紹。

變長參數(shù)兼容和 params 關(guān)鍵字

__arglist 關(guān)鍵字基本用途是兼容 C/C++ 提供的邊長參數(shù)。在 C/C++ 之中,變長參數(shù)我們使用的是三個小數(shù)點(diǎn)來呈現(xiàn)的。但是在 C# 里,我們沒有這樣的語法,因此無法在 C# 里完成兼容。不過,C# 里有一個隱蔽的關(guān)鍵字“__arglist”,可以用來兼容它。

可能有小伙伴會覺得,C# 有一個 params 關(guān)鍵字提供的變長參數(shù),這個是不是就可以了呢?實(shí)際上并不是。C/C++ 提供的變長參數(shù)實(shí)現(xiàn)規(guī)范并不是 C# 這樣。C# 的 params 參數(shù)在底層被直接當(dāng)場改成了一維數(shù)組,所以這也是為什么 C# 里你必須用 params 修飾符去修飾一維數(shù)組參數(shù)的原因;但 C/C++ 里并非如此。C/C++ 的變長參數(shù)在底層是有一個實(shí)際的類型在做這個任務(wù)。對了,va_args。

__arglist 的用法

C# 里提供了與之兼容的類型:RuntimeArgumentHandle,可以提供等價(jià)的操作。用法是這樣的:

我們直接將 __arglist 修飾符當(dāng)成參數(shù)寫在參數(shù)表列上,參數(shù)表列的參數(shù)名、參數(shù)類型全部被該關(guān)鍵字所代替。

接著,__arglist 就表示了一個變長參數(shù)序列。現(xiàn)在,我們需要使用它。我們在第一行執(zhí)行代碼里,實(shí)例化一個 ArgIterator 類型的實(shí)例,并抄寫該關(guān)鍵字到里面去當(dāng)參數(shù)。

然后,得到 args 變量后,我們可使用 for 循環(huán)對其進(jìn)行迭代。注意,args 封裝的類型 ArgIterator 里只有 GetRemainingCount 這樣的方法來控制當(dāng)前迭代的位置。正是因?yàn)檫@個原因,我們這里需要使用倒序迭代,即從“長度”迭代到 1,而不是從 0 到“長度 - 1”。

接著,我們在循環(huán)內(nèi)部使用 TypedReference.ToObject 方法,將該 args 變量得到的當(dāng)前迭代成員取出,當(dāng)成參數(shù)傳入。該靜態(tài)方法將直接返回 object 類型的實(shí)例,即當(dāng)前迭代的成員的值。

最后,我們只需要在 C# 里輸出該結(jié)果即可。

調(diào)用方用法

那么,這樣的方法如何被 C# 進(jìn)行使用呢?其實(shí)并不是很難。我們?nèi)孕枰褂?__arglist 關(guān)鍵字。只不過這次我們放在調(diào)用方,用法是在關(guān)鍵字后添加一對小括號,然后將參數(shù)寫入其中即可:

這樣就可以了。這樣就可以調(diào)用到剛才的方法。我們來看一下完整代碼。

這里稍作解釋。

file 關(guān)鍵字是 C# 11 提供的關(guān)鍵字,表示該類型僅用于當(dāng)前文件范圍之中。它屬于一種訪問修飾符,所以目前 C# 到 11 為止,一共有 8 種訪問修飾級別:private、protected、private protected、protected internal、internal、public、InternalVisibleToAttribute 特性以及 file。

接著,我們使用的是 C# 9 語法:隱式主方法。主方法本應(yīng)該聲明一大堆的部分的,但在該特性之后可允許我們直接將執(zhí)行代碼一句一句寫進(jìn)文件,它們可以不屬于任何一個命名空間以及類型。C# 9 約定,隱式主方法的默認(rèn)包裹類型名就叫 Program,如果你需要拓展 Program 類型往里面加別的成員,可在隱式主方法的代碼執(zhí)行語句之后重新加上 Program 類型聲明的頭部,不過需要加 partial 關(guān)鍵字。因?yàn)橹鞣椒ù藭r(shí)已經(jīng)被我們拿出 Program 類型的聲明部分了。

兼容 C/C++ 的 __arglist 用法

__arglist 關(guān)鍵字怎么實(shí)現(xiàn)兼容 C/C++ 的語法呢?我們拿 printf 函數(shù)舉例。

printf 函數(shù)位于?msvc60.dll 文件之中,我們可使用如下兩種導(dǎo)入模式進(jìn)行函數(shù)導(dǎo)入:

導(dǎo)入過程是可省略 dll 文件后綴名的,估計(jì)很多人都不知道。

導(dǎo)入之后就可以了。這兩種方法的用法和前文一致。

__arglist 關(guān)鍵字的用法的評論 (共 條)

分享到微博請遵守國家法律
赤水市| 伽师县| 湾仔区| 崇义县| 钦州市| 象州县| 夹江县| 门源| 永德县| 老河口市| 乌拉特中旗| 迁安市| 尚志市| 裕民县| 中方县| 宁安市| 崇仁县| 怀安县| 双江| 镇平县| 阜城县| 中超| 大渡口区| 青浦区| 会东县| 崇明县| 武定县| 即墨市| 大厂| 瑞安市| 筠连县| 怀来县| 山西省| 正定县| 宣威市| 读书| 阳春市| 黄陵县| 广西| 大连市| 防城港市|