(部分有轉載)
參數關鍵字決定了方法中參數的引用形式:
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參數就廢了。。。