C#深入淺出 修飾符(二)

來源:互聯網
上載者:User

標籤:

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修飾的參數作用:將參數傳遞類型轉由實值型別轉換為參考型別,這是所傳遞的參數就有參數的副本變為參數的地址;
  1. 由於ref和out同屬按引用傳遞,所以不能通過ref和out的不同的實現重載。即不能定義兩個完全一樣的方法,僅有參數是ref和out的不同。
  2. 不適用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#深入淺出 修飾符(二)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.