回覆有關 C#「參數陣列」的疑問

由於留言回覆的內容太長,超過 Blogspot 允許儲存的字數限制,所以移到單獨的文章裡回覆。

問題
關於參數陣列不懂地方請老師解達:

老師我在msdn查到 params 用法時機
http://msdn.microsoft.com/zh-tw/library/ms229008.aspx

1.不懂以下說法
如果呼叫端幾乎都已經在陣列中有輸入,則不要使用 params 陣列。例如,位元組資料通常會儲存在位元組陣列中,並在其中管理。將 params 關鍵字加入到位元組陣列參數中並不適合一般的情況,因為開發人員通常不會使用尚未儲存在位元組陣列中的個別位元組。

2.恆逸課本中參數陣列"可接收不固定個數的同型別資料"

string [] RecevieData="00 11 22 AA FF CC";
上述宣告這樣代表不固定個數資料嗎
如果不加params 就像以下傳遞陣列當做參數 列子是不是
http://msdn.microsoft.com/zh-tw/library/hyfeyz71%28VS.80%29.aspx

那如果宣告string [] Data=new string[500];
每次傳至funtion(方法)都是固定字數就不必加params時機比較不會發生錯誤違機
不知道第二我理解對不對

1. 關於這點,我們可以從呼叫端的角度來思考。MSDN 上面說的,位元組陣列的例子,確實不適合用來當作參數陣列,因為在實際使用時,呼叫端很少會傳入不明個數的參數,而是會先準備好陣列的內容,再把整個陣列傳過去。想想看你是否會以這種方式呼叫一個函式:

StrangeParamsArray(0x00, 0x11, 0x22, 0xaa, 0xff, 0xcc);
StrangeParamsArray(0x04, 0x2, 0x1);

我想應該很少人會這樣寫。你可以拿 String.Format 的例子來看,它的不定參數傳遞,用起來是不是很方便?因為你每次需要呼叫它時,傳入的參數都可以隨當時的需要而有不同的個數。

2. string [] RecevieData="00 11 22 AA FF CC";
這只是陣列的宣告,並不是不固定的個數資料。如第一點所說,「不固定」,是從呼叫端的角度來看的,是傳入參數時的寫法可以用 (參數1, 參數2, 參數3.....) 這樣不斷以逗號分隔的不定參數,才有意義。

如果你的程式其實都是傳固定的陣列,就不要宣告為 params(雖然一樣可以傳固定陣列,這點我在課堂上有 demo),因為意義不大 ==> 呼叫端使用時如果每次都要先建立一個陣列,那又何必為函式的參數加上 params 宣告呢?用單純的陣列就足夠了。

簡單來說,如果你在設計一個函式時,希望呼叫這個函式的人可以用 (p1, p2, p3, ....) 這樣以逗號分隔方式傳入不定個數參數的寫法,那就是使用 params 的時機了。除此之外,用陣列就好囉。所以一般我們用到 params 的情況,其實不多啦!

希望以上說明有回答你的問題 ^^

Post Comments

技術提供:Blogger.