標籤:
1.函數參數前的修飾符 params ,ref ,outparams修飾的資料類型只能數組,用於參數不固定時;且此參數位於所有形式參數的最後;
public static int GetMax(params int[]args){ if(params==null)throw new exception("請傳幾個值!"); int max=args[0] foreach(int i in args) { if(max<args[i]) max=args[i] } return max;} static void main(string []args){ int i=GetMax(1,2,3,4............);//參數也可以是數組 Console.WriteLine("最大值為:"+i);}
ref和out修飾的參數作用:將參數傳遞類型轉由實值型別轉換為參考型別,這是所傳遞的參數就有參數的副本變為參數的地址;
- 由於ref和out同屬按引用傳遞,所以不能通過ref和out的不同的實現重載。即不能定義兩個完全一樣的方法,僅有參數是ref和out的不同。
- 不適用ref或者out修飾的參數,不一定就是值傳遞。如數組、集合都是參考型別,故不必使用ref修飾,也是按引用傳遞的。
第一種參數無ref修飾;
public static void swap(int m,int n)//參數無ref修飾{ int i=m; m=n; n=i;}static void main(string []args){ int m=2; int n=3; swap(m,n); console.WriteLine("m="+m.Tostring,"n="+n.Tostring);//m=2,n=3此時只是將m.n的值複製一份傳遞給swap方法,交換的是他們的副本;} 第二種參數有ref修飾;
注意:形式參數和實際參數前都必須有ref修飾。
public static void swap(ref int m,ref int n)//參數ref修飾{ int i=m; m=n; n=i;}static void main(string []args){ int i=2; int j=3;//必須要賦值,這樣它才會在記憶體中有地址; swap(ref i,ref j); console.WriteLine("i="+i.Tostring,"j="+j.Tostring);//i=3,j=2此時只是將i.j的地址傳遞給swap方法,交換的是他們的地址,所有數值做相應的改變;}這次之所以成功是因為ref的貢獻。參數按參考型別傳遞,則i和m,j和n共用一塊記憶體空間。在swap方法內部對m,n的值進行了修改,即相當於對i和j的值進行了修改,並且當swap方法內部對m,n的值進行了修改,即相當於對i和j進行了修改,並且當swap方法執行完畢時,該變化仍能維持,即順利地完成了數值的交換。
如果參數類型是數組,則不需要加ref,就可以實現交換,因為數組本來就是參考型別; out讓函數可以輸出多個值
public bool Login(string Account,string Pwd,out Msg){ bool flag=true; if(Account=="admin") { if(Pwd=="pwd") { Msg="登陸成功"; } else { Msg="密碼錯誤"; flag=flase; } } else { Msg="帳號錯誤"; flag=false; } return flag;}static void main(string []args){ string Msg;//擷取返回來的資訊內容,不需要賦值; bool flag=Login(admin,pwd,out Msg);}
- out修飾的參數,不要求傳遞前賦初值(其實賦了也沒有用),凡是用out修飾的參數,在方法內部都認為沒有賦初值。
- out修飾的參數,需要強制在方法內部給它賦值以便將該值帶到外面,而ref修飾的參數則無此限制。
- out修飾的參數,其典型的應用如用於返回多個值,例如方法int.TryParse(參數1,out參數2),參數2即為out修飾,用於將轉換的結果帶到方法外面。整個方法的傳回值為bool,表明是否轉換成功,該函數可以用於判斷使用者輸入的是否為整型數值。
2.static修飾符
3.存取修飾詞
C#深入淺出 修飾符(二)