程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 參數:可選參數和命名參數,可選參數命名

參數:可選參數和命名參數,可選參數命名

編輯:關於.NET

參數:可選參數和命名參數,可選參數命名


設計一個方法的參數時,可部分或全部參數分配默認值。然後,調用這些方法的代碼可以選擇不指定部分實參,接受其默認值。

此外,調用方法時還可以通過指定參數名稱的方式為其傳遞實參。

演示代碼如下:

public static class program
{
    private static int sn = 0;
    private static void M(int x = 9, string s = "A", DateTime dt = default(DateTime), Guid guid = new Guid())
    {
        Console.WriteLine("x={0},s={1},dt={2},guid={3}", x, s, dt, guid);
    }

    static void Main(string[] args)
    {
        M();//全部顯示默認值
        M(8, "X");
        M(5,guid:Guid.NewGuid(),dt:DateTime.Now);//guid,dt為指定的參數名稱
        M(sn++,sn++.ToString());//這裡結果為x = 0, s = 1是因為sn++先執行後進行了+1運算,這個M方法結束後sn為2
  
     M(s:(sn++.ToString()),x:sn++); Console.ReadKey();
  }
}
//輸出結果依次為:
//x=9,s=A,dt=0001/1/1 星期一 0:00:00,guid=00000000-0000-0000-0000-000000000000
//x=8,s=X,dt=0001/1/1 星期一 0:00:00,guid=00000000-0000-0000-0000-000000000000
//x=5,s=A,dt=2017/1/12 星期四 8:55:47,guid=6387f914-cd37-4aa8-a144-2524e4972a44
//x = 0, s = 1, dt = 0001 / 1 / 1 星期一 0:00:00,guid=00000000-0000-0000-0000-000000000000
//x=3,s=2,dt=0001/1/1 星期一 0:00:00,guid=00000000-0000-0000-0000-000000000000

  在定義的方法中,如果為部分參數指定了默認值,注意以下額外的規則和原則:

1.可以為方法、構造器方法和有參屬性(c#索引器)的參數指定默認值。還可以為屬於委托定義的一部分的參數指定默認值。然後在調用該委托的一個變量時,可以省略實參,以接受默認值。

2.有默認值的參數必須放在沒有默認值的參數之後(左邊),例如上面string s沒有默認值則出現變異錯誤。"參數數組"除外,這種參數放在所有參數之後,而數組本身不能有默認值。

3.默認值必須是編譯時能確定的常量值。c#認定的基元類型,枚舉類,以及能設為null的任何引用類型可設為默認值。對於任何值類型的參數,可將默認值設為值類型的一個實例,並讓它

的所有字段都包含零值。可用default和new來表達這個意思。(如上例dt,guid)

4.不要重命名參數變量。否則,任何調用這如果以傳參數名的方式傳參都必須修改他們的代碼。

5.如果方法是從模塊的外部調用,更改參數的默認值具有潛在危險性。

6.如果參數用ref或者out關鍵字標識,就不能設置默認值,因為沒有辦法為這些參數傳遞一個有意義的默認值。

使用可選或命名參數調用一個方法時,還有以下額外規則:

1、實參可按任何順序傳遞,但是,命名實參只能在參數列表最後。

2、可按名稱將實參傳給沒有默認值的參數。但是,所有要求的實參都必須傳遞(按位置或按名稱)

3、c#不允許省略逗號之間的實參。

如果參數需要ref/out,為了以傳參數值的方法傳遞實參,使用下面的語法:

//方法聲明

private static void M(ref int x){...}

//方法調用

int=5;

M(x:ref a);

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved