天天看點

C# - 方法的可變參數-params 050

作者:源丁程式設計

示例1:計算操作數的和

因為沒有說明會有多少個參數,是以需要定義多個方法重載

static int Add(int a, int b)
{
    return a + b;
}
static int Add(int a, int b, int c)
{
    return a + b + c;
}
static int Add(int a, int b, int c, int d)
{
    return a + b + c + d;
}
static int Add(int a, int b, int c, int d, int e)
{
    return a + b + c + d + e;
}
static int Add(int a, int b, int c, int d, int e, int f)
{
    return a + b + c + d + e + f;
}
//.....很多重載
//調用方法
static void Main(string[] args)
{
   int sum = Add(1, 2);
   Console.WriteLine(sum);
   sum = Add(1, 2, 3);
   Console.WriteLine(sum);
   sum = Add(1, 2, 3, 4);
   Console.WriteLine(sum);
   sum = Add(1, 2, 3, 4, 5);
   Console.WriteLine(sum);
   Console.ReadKey();
}           
C# - 方法的可變參數-params 050

計算操作數的和

此示例程式運作時會根據參數的個數調用相應的重載方法

示例隻有5個傳入相同類型參數的方法重載,如果要求提升需要6個,7個乃至更多個得需要定義多少個方法重載,再提升要求可以傳入不同類型不同個數的參數....

Console.WriteLine("");方法,此方法不僅可以傳入不同類型,還可以傳入不确定的任意多個參數;可以傳入不同類型是因為方法重載或資料類型,可以傳入任意多個參數

通過快捷鍵F12檢視Console.WriteLine("");的方法都有哪些重載

C# - 方法的可變參數-params 050

Console.WriteLine("")的方法重載

Console.WriteLine("");方法最多隻有4個參數的重載方法(arg0,arg1,arg2,arg3)

示例:如下代碼

static void Main(string[] args)
 {
   //第一句有相應的重載方法
     Console.WriteLine("我叫 {0} 性别 {1} 今年 {2}歲了 上大學{3}年級 ", "張三", "男", 20, 1);
   //方法中也沒見有5個/7個參數的重載方法  
     Console.WriteLine("我叫 {0} 性别 {1} 今年 {2}歲了 上大學{3}年級 身份證号 {4}", "張三", "男", 20, 1, "12390787656564");
     Console.WriteLine("我叫 {0} 性别 {1} 今年 {2}歲了 上大學{3}年級 身份證号 {4} {5} {6}", "張三", "男", 20, 1, "12390787656564", "x", "xx");
     Console.ReadKey();
 }           
C# - 方法的可變參數-params 050

通過F12檢視調用了哪個重載方法

第一句代碼調用了有4個參數的重載方法的原型,第二,三句代碼調用了由params修飾的object類型數組的重載方法

由此看出object類型用于接收不同類型參數,數組用于接收多個參數,params用于修飾數組,其作用就是讓數字變為可變數組

方法的可變參數

params:本意參數,參數個數(是param的複數)用程式設計的意思解釋為可變參數

這裡說的可變,不是說參數的類型可變,參數類型可變将類型設定為object類型即可

參數可變:是指參數的個數可變,一般是由關鍵字params修飾的指定類型的數組構成

可變參數格式如下

定義了一個無傳回值
有可變參數的方法
static void Test(params int[] arr) {   }           

方法使用params修飾參數的益處,傳入參數的個數可以是0個也可以是多個,還可以是數組,是以示例1隻需定義一個方法即可

static int Add(params int[] arr)
{
    int sum = 0;  
  //數組長度為0時即沒有傳入參數
  //隻執行了判斷條件(int i = 0; i < arr.Length;)
  //不會執行循環體
    for (int i = 0; i < arr.Length; i++)
    {
        sum += arr[i];
    }
    return sum;
}
//調用方法
static void Main(string[] args)
{
  //隻為示範可變參數
  //沒有參數
  int sum = 0;
  //一個參數沒有,可變數組不是null
  //而是一個長度為0的數組 
  sum = Add();
  Console.WriteLine("sum= {0}", sum);
  //3個參數
  sum = Add(1, 2, 3);
  Console.WriteLine("sum= {0}", sum);
  //數組參數
  int[] arr = { 1, 2, 3, 4, 5, 6 };
  sum = Add(arr);
  Console.WriteLine("sum= {0}", sum);
  Console.ReadKey();
}           
C# - 方法的可變參數-params 050

調用可變參數方法

注意事項:當既有普通參數,又有可變參數時,可變參數必須放在所有參數的最後位置

//方法原型
static void Test(string name,bool gender,params object[] arr);
//可變參數可以傳入任意的C#資料類型           

如果可變參數放在普通參數的中間或者前面就會報錯

C# - 方法的可變參數-params 050

錯誤的可變參數書寫格式

可變參數的特點小結

1)可變參數必須放在參數中所有參數的後面

2)參數使用params修飾的數組

3)可以傳入任意個參數(包括0個)或直接傳入數組

繼續閱讀