引數數目可變的成員

2021-09-20 14:28:54 字數 2382 閱讀 4178

引數數目可變的成員

.net framework 開發人員指南

引數數目可變的成員

陣列用於將數目可變的引數傳遞給成員。某些語言(如 c#)提供了乙個關鍵字,用於修飾傳遞可變引數的陣列。對於不提供關鍵字的語言,paramarrayattribute 屬性可提供此功能。該關鍵字和屬性影響成員簽名的最後乙個引數。該引數必須是一維陣列。

下面的**示例演示定義和呼叫引數數目可變的方法。注意,在 demonstratevariableparameters 方法中,呼叫 usevariableparameters 前引數不會放入陣列。

c#複製**

public static void usevariableparameters(params int list)

console.writeline(); }

public static void demonstratevariableparameters()

下列準則有助於了解何時使用可變陣列作為引數是適合的和有益的。

如果需要終端使用者傳遞少量元素,則考慮向陣列引數新增 params 關鍵字。

通常,如果開發人員要傳遞很多元素,則 params 關鍵字可能用處不大,因為開發人員不太可能內聯傳遞大量物件。

如果呼叫方幾乎總要將輸入放入陣列,則不要使用 params 陣列。

例如,位元組資料通常在位元組陣列中儲存和處理。通常,將 params 關鍵字新增到位元組陣列引數不能解決問題,因為開發人員通常不使用還未儲存到位元組陣列中的單個位元組。

如果陣列由採用 params 陣列引數的成員進行了修改,則不要使用 params 陣列。

公共語言執行庫 (clr) 可能已建立了乙個臨時陣列物件。如果方法修改臨時陣列,則這些修改對呼叫方是不可用的。

考慮在簡單過載中使用 params 關鍵字,即使更複雜的過載不能使用它。

在某個過載(即使不是所有過載)中使用 params 陣列,對開發人員都是有好處的。

盡量對引數進行排序,以使它能夠使用 params 關鍵字。

這意味著,只要可能,陣列引數就應該是指定的最後乙個引數。下面的**示例演示的引數排序是不正確的。

c#複製**

public int add (int i,int j, short numberbase)

c#複製**

public int add (int i, int j, int k, short numberbase)

c#複製**

// can't use params array.

public int add (int numbers, short numberbase)

這些引數應重新排序,如下所示:

c#複製**

public int add (short numberbase, int i,int j)

c#複製**

public int add (short numberbase, int i, int j, int k)

c#複製**

// can use params array.

public int add (short numberbase, params int numbers)

考慮在效能極為敏感的 api 中為使用少量引數的呼叫提供特殊過載和**路徑。

按照此準則,在呼叫帶有少量引數的成員時可以避免建立陣列。引數名稱應為陣列引數的單數形式,後跟乙個數字字尾。下面的**示例演示乙個符合此準則的成員簽名。

c#複製**

public static void writeline(

string format,

object arg0,

object arg1,

object arg2 )

注意 null(在 visual basic 中為 nothing)可以作為 params 陣列引數進行傳遞。

在處理 null 陣列之前,成員應對其進行檢查。

不要使用 varargs 方法,這種方法以省略號的形式表示。

因為 varargs 呼叫約定不符合 cls,所以不應在公共成員中使用。它可以在內部使用。

有關設計指南的更多資訊,請參見 krzysztof cwalina 和 brad abrams 編著、addison-wesley 於 2005 年出版的「framework design guidelines: conventions, idioms, and patterns for reusable .net libraries」(《框架設計指南:可重用 .net 庫的約定、術語和模式》)。

請參見概念

引數設計

其他資源

成員設計準則

類庫開發的設計準則

函式引數數量可變

python函式使用return返回值,如果不用 return,而用print輸出值,這個函式預設還有乙個返回值為none def total a 5,numbers,phonebook print a a for single item in numbers print single item s...

C 函式引數數目未確定

宣告這些函式的方式是在參數列最後用省略號 結束 如 int printf const char format,要解析函式的引數需要用到va list,宣告乙個va list,然後使用巨集va start定義並初始化va list,再通過巨集va arg按順序提取出各個無名引數,每次呼叫va arg,...

深度學習模型各層引數數目對於效能的影響

本文基於卷積神經網路和遞迴卷積神經網路模型 了深度學習網路不 同層級間引數分布對網路效能的影響,在cifar 10 cifar 100和svhn資料集上進行了大量的實驗。結果表明 在保證網路總引數大致相等並穩定在飽和的臨界值附近的條件下,增加高層引數數量的能夠 提公升網路效能,而增加低層引數數量的會...