程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> C#委托

C#委托

編輯:C#基礎知識

..>前言

  無力吐槽今天的天氣,特別冷,喝杯奶茶繼續寫點東西吧!

委托

      委托是一種引用類型,類似於C語言中的指針類型,不過這個“指針”一定是指向某種類型的函數的。

   對象也是引用類型,注意引用類型與值類型的區別。例如:

 class A
     {
         public int x;
     }
     class Program
     {
         static void Main(string[] args)
         {
             A a = new A();
             a.x = 5;
             A b = a;
             b.x = 6;
             Console.WriteLine(a.x);//6
             Console.WriteLine(b.x);//6 
             A c = new A();
             c = a;
             c.x = 7;
             Console.WriteLine(a.x);//7
             Console.WriteLine(c.x);//7
             Console.Read();
         }
 }

 

定義委托用關鍵字delegate,格式為:

           訪問修飾符delegate返回值類型 方法名(形參表);

    例如:public delegate int myDelegate(int x,int y) ;

           注意定義的委托只是一種類型,要創建這種類型的實例才能完成對委托的操作。而在創建委托的實例時,又必須先定義一個這函數,或實例化一個對象,將這個函數或對象的方法封裝到新創建的委托類型的變量中去。

           委托的操作有:

    =,將另一個函數封裝到委托中去。

           +,將另一個函數添加到委托中去

            -,將另一個函數從委托中刪除

    例如以下程序: 

    一:   

       public delegate int myDelegate(int x,int y) ;
         static int f(int a, int b)
         { return a + b; }
         static int ff(int x, int y)
         { return x > y ? x : y; }
         static void Main(string[] args)
         {
             myDelegate a = new myDelegate(f);
             Console .WriteLine ( a(3, 5));//8
             myDelegate b = new myDelegate(ff);
             Console.WriteLine(b(3, 5));//5
             myDelegate c=a+b;//將a與b互換看看結果如何?
             Console .WriteLine (c(3,5));//5,這裡要補充一下,c(3,5)是有兩個個方法的返回值,由於後面方法的返回值值覆蓋前面方法的返回值,所以只打印出後面方法的返回值,同學別在這裡搞糊塗的呀。
             c = c - b;//將b改成a看看結果如何?
             Console.WriteLine(c(3, 5));//8
             Console.Read();
         }

    二:    

      public delegate void myDelegate(int x, int y);
         static void fun(int a, int b)
         { Console.WriteLine(a + b); }
         static void fun1(int x, int y)
         { Console.WriteLine(x > y ? x : y); }
         static void Main(string[] args)
         {
             myDelegate a = new myDelegate(fun);
             a(3, 5);//8
             myDelegate b = new myDelegate(fun1);
             b(3, 5);//5
             myDelegate c = a + b; //將a與b互換看看結果如何?
             c(3, 5);//8,5,這裡每一個方法都有輸出(看上面的方法??),所以有兩個結果呃。
             c = c - b; //將b改成a看看結果如何?
             c(3, 5);//8
             Console.Read();
         }

     

    看到這裡是不是覺得委托其實也沒啥的呢,歡迎大家的意見噢

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved