1. 程式人生 > >C#學習第七天

C#學習第七天


C#中的params引數(引數陣列):  
1、params引數是陣列。呼叫方式可以陣列方式,也可以單個元素方式。

 static void test(String name,params int[] scores)
        {
            StringBuilder sb = new StringBuilder();
            foreach(int i in scores)
            {
                sb.AppendFormat("{0}-",i);
            }
            Console.WriteLine("{0}你好,你的Scores is {1}",name,sb);
        }
            test("劉德華",new int[]{1,2,3});//以陣列方式呼叫
            test("周星馳",80,90,100,98);//單個元素方式呼叫
            test("梁朝偉");//無引數方式呼叫


 2、params引數必須是最後一個引數。

3、params引數不能是ref或out引數。

4、params引數不是方法過載的簽名特性。

5、當呼叫方法而沒有傳遞params引數時,編譯器實際傳遞一個空陣列(長度為0的陣列)。

{

  分析:當以單個元素傳遞params引數時,實際編譯器自動生成一個數組:該陣列長度等於這些引數元素個數,元素就是這些單個引數。然後吧該陣列傳遞到方法中。

例如:test("劉德華",10,5);系統實際執行如下操作:

int[] temp = new int[2]; temp[0] = 10; temp[1] = 5 ; test("劉德華",temp).

}

擴充套件方法罵人

    //擴充套件方法
    /*
     * 1、擴充套件方法必須放在靜態類中。
     * 2、擴充套件方法必須是靜態的。(靜態類中不能存在例項成員)
     * 3、要擴充套件的型別必須是第一個引數,且以this為字首(擴充套件類例項),後面可以有普通引數
     * 4、使用擴充套件方法時,必須把擴充套件方法所在的靜態類加入使用的名稱空間
     * 5、擴充套件型別的子類也自動具有同樣的擴充套件方法(繼承)
     */
    static class Util
    {
        public static int GetPhqInt(this Animal animal)
        {
            return animal.GetHashCode() + 10000000;
        }

        internal static void PrintClassName(this Animal animal)
        {
            Console.WriteLine(animal.getClassName());
        }
        internal static void Add100(this int num)
        {
            Console.WriteLine("{{加100之後的資料:{0}}}",num+100);
        }
    }

呼叫:


  animal.PrintClassName();
           pig.PrintClassName();
           Console.WriteLine(dog.GetPhqInt());
           int a = 8;
           a.Add100();