天天看點

C# 參數關鍵字(params,ref,out)

(部分有轉載)

參數關鍵字決定了方法中參數的引用形式:

1. Params:關鍵字可以指定在參數數目可變處采用參數的方法參數。(Params關鍵字後的參數可以是滿足參數類型的任意數量的參數數列)

限制:

(1)一個方法隻允許有一個Params參數。

(2)Params關鍵字後隻能由一個參數(數列)。

例://因為參數數列是Object類型的,是以可以接收一切參數類型

 public void exampleParams(string id, int count, Params Object[] reference)

{

StringBuilder info =  new StringBuilder();

info.Append("Name: " + id + ", Count: " + count + "/n");

foreach(object obj in reference)

{

info.Append(obj.ToString() + "/n");

}

}

//調用處方法,後三個參數為Params參數,不同類型都可以滿足Object類型。

exampleParams("P0003", 102, staff_info, lstStaffCompany, staff_healthy)

2.Ref:關鍵字使參數按引用傳遞。其效果是,當控制權傳遞回調用方法時,在方法中對參數所做的任何更改都将反映在該變量中。

限制:

(1)若要使用 ref 參數,則方法定義和調用方法都必須顯式使用 ref 關鍵字。

(2)傳遞到 ref 參數的參數必須最先初始化。這與 out 不同,out 的參數在傳遞之前不需要顯式初始化。

(3)屬性不是變量,是以不能作為 ref 參數傳遞。(非引用變量時屬性的傳遞是值的傳遞,不改變被傳遞的屬性值)

(4)盡管 ref 和 out 在運作時的處理方式不同,但它們在編譯時的處理方式是相同的。是以,如果一個方法采用 ref 參數,而另一個方法采用 out     參數,則無法重載這兩個方法。如果兩個方法的參數隻有ref 和 out的差別,則這兩個方法無法重載。

3.Out:關鍵字使參數按引用傳遞。

與Ref基本相同,主要差別有:

(1)Out參數可以不用初始化就被引用。

(2)因為(1)的限制,是以在應用out的犯法中,out參數必須被指派

對Ref 和 Out的了解:Ref必須是本來就存在的變量,在方法内改變不改變都行。Out可以是本來不存在(未初始化)的變量,但是不許在方法内改變(指派),  要不然Out參數就廢了。。。