zoukankan      html  css  js  c++  java
  • 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);//6
    14             Console.WriteLine(b.x);//6 
    15             A c = new A();
    16             c = a;
    17             c.x = 7;
    18             Console.WriteLine(a.x);//7
    19             Console.WriteLine(c.x);//7
    20             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));//8
    10             myDelegate b = new myDelegate(ff);
    11             Console.WriteLine(b(3, 5));//5
    12             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));//8
    16             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);//8
    10             myDelegate b = new myDelegate(fun1);
    11             b(3, 5);//5
    12             myDelegate c = a + b; //将a与b互换看看结果如何?
    13             c(3, 5);//8,5,这里每一个方法都有输出(看上面的方法⬆️),所以有两个结果呃。
    14             c = c - b; //将b改成a看看结果如何?
    15             c(3, 5);//8
    16             Console.Read();
    17         }

         

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

      

    诗人是骗子,骗子是诗人,hhh
  • 相关阅读:
    [转]为什么匿名内部类参数必须为final类型
    [转]软件开发规范—模块开发卷宗(GB8567——88)
    [转]概要设计与详细设计的区别
    [转]解析UML建模语言中的UML图分类、 UML各种图形及作用
    python mysql插入中文乱码
    pycharm mysql数据源配置、SQL方言配置
    pycharm批量查找替换,正则匹配
    python第三方库安装
    什么是Vagrant
    python读写excel文件
  • 原文地址:https://www.cnblogs.com/lizuo2828/p/sharp.html
Copyright © 2011-2022 走看看