1. 程式人生 > >c#基礎學習(0724)之可變參數、ref和out

c#基礎學習(0724)之可變參數、ref和out

col ram test 不為 外部 rri money 改變 end

params可變參數,無論有幾個參數,必須出現在參數列表的最後,可以為可變參數直接傳遞一個對應類型的數組

#region 可變參數
//1.如果方法有多個參數,可變參數可以作為最後一個參數
//2.可變參數可以傳遞參數也可以不傳遞參數,如果不傳遞參數,則args數組為一個長度為0的數組
//3.可變參數可以直接傳遞一個數組進來
static void Test(string msg,params int[] args)
{
  //如果可變參數傳值為null時,需要加上判斷
  if(args!=null)
  {
    
  }  
}
#endregion

static void Main(string[] args)
{

  //Console.WriteLine("Hello World!");
  //Test("aa", 10, 1, 2, 32, 4, 5, 6);
  //int[] arrInt = new int[] { 1, 2, 3, 4, 5 };
  //Test("xxx");
  //Test("aaaa", arrInt);
  //Test("aaaa", null);
  //Console.ReadKey();
  //Console.WriteLine(""); ;
  //List<string> list = new List<string>();
  //Console.WriteLine("===={0}====",list);
  //Console.ReadKey();

}

ref參數使用方法

//ref僅僅時一個地址,引用傳遞,可以把值傳遞強制改為引用傳遞
//ref:參數在傳遞之前必須賦值,在方法中可以不為ref參數賦值,可以直接使用
//ref:應用場景內部對外部的值進行改變,out則是內部為外部變量賦值,out一般用在函數有多個返回值的場所
#region ref參數
static void JianJin(ref int m)
{
  m=m+300;
}
static void KouKuan(ref int m)
{
  m=m-300;
}
#endregion

//使用
static void Main(string[] args)
{
  int money=1000
; JianJin(ref money); KouKuan(ref money); Console.WriteLine(money); Console.ReadKey(); }

out參數使用方法

#region out參數
static void Test1(out int x)
{
  //out參數在使用之前必須在方法裏面為out參數賦值
  //out參數無法獲取傳遞進來的變量中的值,只能為傳遞進來的變量賦值
  //out參數在方法執行完畢之前,必須賦值。
  
  //Console.WriteLine(x);//報錯:使用了未賦值的out參數"x"
  x=100;
  x++;
}
#endregion

//out使用
static void Main(string[] args)
{
  int m=1000;//out方法可以不傳值,傳了也沒用,因為方法裏面必須為out參數賦值
  Test1(out m);
  Console.WriteLine(m);
}

out多個參數使用場景

//方法
static int GetAge(out string name,out int height)
{
  name="超哥";
  height=180;
  return 1000;
}

//使用場景,使用ref也可以返回多個值
static void Main(string[] args)
{
  //兩個參數可以內聯聲明
  string n;
  int h;
  int age=GetAge(out n,out h);
  Console.WreteLine(age);
  Console.WriteLine(n);
  Console.WreteLine(h);
  Console.ReadKey();

  #region out使用場景2
  string s="abc";
  int result;
  //將數字的字符串表示形式轉換為他的等效32為有符號整數。一個指示轉換是否成功的返回值
  bool b=int.TryParse(s,out result);
  if(b)
  {
    Console.WriteLine("轉換成功,結果為:{0}",result);
  }
  else
  {
    Console.WriteLine("轉換失敗,結果為:{0}",s)
  }
  #endregion
}

ref交換兩個變量位置

#region 交換兩個變量
static void Swap(ref int n1,ref int n2)
{
  int tmp=n1;
  n1=n2;
  n2=tmp;
}
#endregion

static void Main(string[] args)
{
  int m=10,x=20;
  Swap(ref m, ref x);
  Console.WriteLine(m);
  Console.WriteLine(x);
  Console.ReadKey();
}

out用戶登錄練習

private static bool ValidUserLogin(string uid, string pwd, out string msg)
{
  bool isOk=false;
  if(uid!="admin")
  {
    msg="用戶名錯誤";
  }
  else if(pwd!="888888")
  {
    msg="密碼錯誤";
  }
  else
  {
    isOk=true;
    msg="歡迎用戶:"+usd;
  }
  return isOk;
}

//使用
static void Main(string[] args)
{
  #region用戶登錄練習
  while(true)
  {
    Console.WriteLine("請輸入用戶名:");
    string uid=Console.ReadLine();
    Console.WriteLine("請輸入密碼:");
    string pwd=Console.ReadLine();
    string msg;//可以內聯聲明
    bool isOk=ValidUserLogin(uid,pwd,out msg);
    if(isOk)
    {
      Console.WriteLine("登錄成功===={0}",msg);
    }
    else
    {
      Console.WriteLine("登錄失敗===={0}",msg);
    }
  }
  #endregion
}

c#基礎學習(0724)之可變參數、ref和out