1. 值參數(shù) (不加任何修飾符,是默認(rèn)的類型) 1. 值傳遞: 值類型是方法默認(rèn)的參數(shù)類型,采用的是值拷貝的方式。也就是說(shuō),如果使用的是值類型,則可以在方法中更改該值, static void ChangeValue(int x, int y)
/*{ int temp = x; x = y; y = temp; } static void Main(string[] args) { int i = 1, j = 2; ChangeValue(i, j); Console.WriteLine("i = {0}, j = {1}", i, j); Console.Read(); } * 輸出結(jié)果為: i=1, j=2 * 未能實(shí)現(xiàn)ChangeValue()計(jì)劃的功能,因?yàn)榭刂茩?quán)傳遞回調(diào)用方法時(shí)不保留更改的值 */
static void ChangeValue(ref int x,ref int y)
{ int temp = x; x = y; y = temp; } static void Main(string[] args) { int i = 1, j = 2; ChangeValue(ref i,ref j); Console.WriteLine("i = {0}, j = {1}", i, j); Console.Read(); } /*
* 引用類型實(shí)現(xiàn)了ChangeValue()計(jì)劃的功能: * 輸出為: * i = 2, j =1 */
3. 輸出類型(out類型) 其效果是,當(dāng)控制權(quán)傳遞回調(diào)用方法時(shí),在方法中對(duì)參數(shù)所做的任何更改都將反映在該變量中。 3.1. ref 要求變量必須在傳遞之前進(jìn)行初始化,out 參數(shù)傳遞的變量不需要在傳遞之前進(jìn)行初始化。 3.2. 盡管作為out 參數(shù)傳遞的變量不需要在傳遞之前進(jìn)行初始化,但需要在調(diào)用方法初始化以便在方法返回之前賦值。 當(dāng)希望方法返回多個(gè)值時(shí),聲明 out 方法非常有用。使用 out 參數(shù)的方法仍然可以返回一個(gè)值。一個(gè)方法可以有一個(gè)以上的 out 參數(shù)。 static void ChangeValue(out int x,out int y)
{ //在這里進(jìn)行了i和j的初始化 x = 1; y = 2; int temp = x; x = y; y = temp; } static void Main(string[] args) { //此處不進(jìn)行i和j的賦值 int i , j; //那么若是給i,j再次賦值后(int=3,j=4),結(jié)果為什么呢? ChangeValue(out i,out j); Console.WriteLine("i = {0}, j = {1}", i, j); Console.Read(); } /*
* 輸出類型也實(shí)現(xiàn)了ChangeValue()計(jì)劃的功能: * 輸出為: * i = 2, j =1 * 即使給i,j初始化,結(jié)果還是i=2,j=1
*/
4. 數(shù)組型參數(shù)類型(params類型) params關(guān)鍵字可以指定在參數(shù)數(shù)目可變處采用參數(shù)的方法參數(shù)。也就是說(shuō)。使用params可以自動(dòng)把你傳入的值按照規(guī)則轉(zhuǎn)換為一個(gè)新建的數(shù)組。 public static void UseParams(params object[] list)
{ for (int i = 0; i < list.Length; i++) { Console.WriteLine(list[i]); } } static void Main(string[] args) { // 一般做法是先構(gòu)造一個(gè)對(duì)象數(shù)組,然后將此數(shù)組作為方法的參數(shù) object[] arr = new object[3] { 500, '3', "Test" }; UseParams(arr); // 而使用了params修飾方法參數(shù)后,我們可以直接使用一組對(duì)象作為參數(shù) // 當(dāng)然這組參數(shù)需要符合調(diào)用的方法對(duì)參數(shù)的要求 UseParams(500, '3', "Test"); Console.Read(); } /*
* 輸出為: *500 *3
*Test
*500
*3
*Test
*/
|
|