C#之方法的聲明與調用


//params關鍵字使用   

class Program { static void Main(string[] args){ int[] arr = { 10, 20, 30,60 }; Console.WriteLine(AddFunction(arr)); Console.WriteLine(AddFunction(10,20,30,60)); Console.ReadKey(); } static int AddFunction(params int[] values ) { int temp = 0; foreach (var item in values) { temp += item; } return temp; }

實現了一個AddFunction方法,用於接收一組整數,並返回它們的和。參數values被加上params關鍵字后,在調用時可以在實參列表中列舉出這組整數中的每個元素,非常方便。
關於params關鍵字的用法,需要注意以下幾點:
1. params只能用於一維數組,不能用於多維數組和諸如ArrayList、List<T>等任何類似於數組的集合類型。
2. 被加上params關鍵字的形參,必須是形參列表中最后一個形參,並且方法聲明中只允許一個 params 關鍵字。
3. 用params關鍵字的方法,有三種調用形式:
第一種,列舉出數組各元素:AddFunction(1,2,3),這也是最常用的形式;
第二種,像沒有加params關鍵字的數組形參那樣,用數組名做實參:AddFunction(new int[]{1,2,3})或int n=new int[]{1,2,3};AddFunction(n);;
第三種,加params關鍵字的參數在調用時可以省略:AddFunction();//返回0;這種方式有時可以少定義一個方法重載,但當明確定義了重載int AddFunction()時,編譯器會優先調用int AddFunction(),而不是AddFunction(params int[] values)。而且省略params型參數,方法內部仍會new一個元素個數為0的數組,效率略查。
第四種,不省略params型參數,用null代替,效率比第三種略高,因為其內部不會new這個數組。

 

ref關鍵字使用

        static void Main(string[] args){

            string ss = "1-425-42-4-2-5";
            change(ref ss);
            Console.WriteLine(ss);
            Console.ReadKey();
        }
        static void change(ref string value) {
            string[] strArray = value.Split('-');
            value = String.Join("+",strArray);
        }

 

out關鍵字的使用(經過試驗:out,ref可以混用(在注意語法的前提下))

        static void Main(string[] args){

            int[] arr = { 50,56,23,45656,146,2353566,1633,22};
            int indexOut = 0;//ref:要初始化,out:不用初始化
            Console.WriteLine("最大值{0},索引是{1}",MaxNumber(arr,ref/*out*/ indexOut),indexOut);
            Console.ReadKey();
        }

        static int MaxNumber(int[]values ,ref/*out*/ int index) {

            int max = values[0];
            index = 0;
            for (int i = 0; i < values.Length; i++) {
                if (max < values[i]) {
                    max = values[i];
                    index = i;
                }         
            }
            return max;
        }

 二者區別與聯系

        首先:兩者都是按地址傳遞的,使用后都將改變原來參數的數值。

        其次:ref可以把參數的數值傳遞進函數,但是out是要把參數清空,就是說你無法把一個數值從out傳遞進去的,out進去后,參數的數值為空,所以你必須初始化一次。這個就是兩個的區別,ref是有進有出,out是只出不進。

        ref 關鍵字使參數按引用傳遞。其效果是,當控制權傳遞回調用方法時,在方法中對參數的任何更改都將反映在該變量中。若要使用 ref 參數,則方法定義和調用方法都必須顯式使用 ref 關鍵字。

        傳遞到 ref 參數的參數必須最先初始化。這與 out 不同,后者的參數在傳遞之前不需要顯式初始化。

        out 關鍵字會導致參數通過引用來傳遞。這與 ref 關鍵字類似,不同之處在於 ref 要求變量必須在傳遞之前進行初始化。若要使用 out 參數,方法定義和調用方法都必須顯式使用 out 關鍵字。

 

靜態方法與實例方法

    靜態方法只能訪問類中的靜態成員,實例方法可以訪問類中的任何成員

 

虛方法(virtual) 重寫虛方法(override)  不允許重寫(sealed)外部方法(DllImport)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM