首页 > 代码库 > C#委托学习

C#委托学习

..>前言

  无力吐槽今天的天气,特别冷,喝杯奶茶继续写点东西吧!

委托

      委托是一种引用类型,类似于C语言中的指针类型,不过这个“指针”一定是指向某种类型的函数的。

   对象也是引用类型,注意引用类型与值类型的区别。例如:写出以下程序的运行结果。

 1 class A 2     { 3         public int x; 4     } 5     class Program 6     { 7         static void Main(string[] args) 8         { 9             A a = new A();10             a.x = 5;11             A b = a;12             b.x = 6;13             Console.WriteLine(a.x);//614             Console.WriteLine(b.x);//6 15             A c = new A();16             c = a;17             c.x = 7;18             Console.WriteLine(a.x);//719             Console.WriteLine(c.x);//720             Console.Read();21         }22 }

 

定义委托用关键字delegate,格式为:

           访问修饰符delegate返回值类型 方法名(形参表);

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

           注意定义的委托只是一种类型,要创建这种类型的实例才能完成对委托的操作。而在创建委托的实例时,又必须先定义一个这函数,或实例化一个对象,将这个函数或对象的方法封装到新创建的委托类型的变量中去。

           委托的操作有:

    =,将另一个函数封装到委托中去。

           +,将另一个函数添加到委托中去

            -,将另一个函数从委托中删除

    例如以下程序: 

    一:   

 1       public delegate int myDelegate(int x,int y) ; 2         static int f(int a, int b) 3         { return a + b; } 4         static int ff(int x, int y) 5         { return x > y ? x : y; } 6         static void Main(string[] args) 7         { 8             myDelegate a = new myDelegate(f); 9             Console .WriteLine ( a(3, 5));//810             myDelegate b = new myDelegate(ff);11             Console.WriteLine(b(3, 5));//512             myDelegate c=a+b;//将a与b互换看看结果如何?13             Console .WriteLine (c(3,5));//5,这里要补充一下,c(3,5)是有两个个方法的返回值,由于后面方法的返回值值覆盖前面方法的返回值,所以只打印出后面方法的返回值,同学别在这里搞糊涂的呀。14             c = c - b;//将b改成a看看结果如何?15             Console.WriteLine(c(3, 5));//816             Console.Read();17         }

    二:    

 1      public delegate void myDelegate(int x, int y); 2         static void fun(int a, int b) 3         { Console.WriteLine(a + b); } 4         static void fun1(int x, int y) 5         { Console.WriteLine(x > y ? x : y); } 6         static void Main(string[] args) 7         { 8             myDelegate a = new myDelegate(fun); 9             a(3, 5);//810             myDelegate b = new myDelegate(fun1);11             b(3, 5);//512             myDelegate c = a + b; //将a与b互换看看结果如何?13             c(3, 5);//8,5,这里每一个方法都有输出(看上面的方法??),所以有两个结果呃。14             c = c - b; //将b改成a看看结果如何?15             c(3, 5);//816             Console.Read();17         }

     

    看到这里是不是觉得委托其实也没啥的呢,欢迎大家的意见噢

  

 

C#委托学习