C# 委托

直接上实例。代码含有注释。

//类型A,内有一个函数

  class A
    {
        public void Close_A()
        {
            Console.WriteLine("Close_A");
        }
    }

//类型B,里面有一个函数。

 class B
    {
        public void Close_B()
        {
            Console.WriteLine("Close_B");
        }
    }

//类型C,里面有一个静态方法

    class C
    {
        static public void Static_Close_C()
        {
            Console.WriteLine("Static_Close_C");
        }
    }


class Controller
    {
        //委托关键字  定义委托类型。 可以加参数列表
        delegate void stop_Con();    
        //用委托类型定义委托变量
        private stop_Con stop_con1;
        //构造函数中,对委托加入方法。
        public Controller()
        {
            //加入委托前,必须保证方法实例化,静态函数除外
            a1 = new A();
            b1 = new B();
            //委托指向的方法,参数列表和返回值,需要和委托定义的保持一致
            //委托返回类型是void,参数是空。(Close_A的返回值也必须是Void,参数也必须是空,否则报错)
            //多播委托,返回值基本上都是VOID,

            this.stop_con1 += a1.Close_A;
            //this.stop_con1 += new stop_Con(a1.Close_A);  //意思同上
            this.stop_con1 += b1.Close_B;
            //静态方法,直接用类名
            this.stop_con1 += C.Static_Close_C;


        }
        private A a1;//定义类A的引用a1
        private B b1;//B类引用b1
        public void Close()
        {
            //调用定义的委托变量,实际就是调用,a1.Close_A() 和 b1.Close_B和C.Static_Close_C():;
            this.stop_con1();
        }
    }

  static void Main(string[] args)
        {
            Controller con = new Controller();
            con.Close();
        }

还可以通过属性的方法调用委托。或者通过函数参数给传递委托。

 class Controller
    {
        //委托关键字  定义委托类型。 可以加参数列表
        public delegate void stop_Con();    
        //用委托类型定义委托变量
        private stop_Con stop_con1;
        //通过函数调用委托,委托之间可以进行加减运算
        public void Add(stop_Con s)
        {
            stop_con1+=s;
        }

public void Remove(stop_Con s)
        {
            stop_con1 -= s;
        }

        //通过属性的方法调用委托,此时委托类型的定义,需要声明为public
        public stop_Con Stop_con1
        {
            get { return stop_con1; }
            set { this.stop_con1 = value; }
        }
        private A a1;//定义类A的引用a1
        private B b1;//B类引用b1 
    }

static void Main(string[] args)
        {
            A a1=new A();
            Controller con = new Controller();
            con.Stop_con1 += a1.Close_A;
            B b1 = new B();
            con.Add(b1.Close_B);
            con.Stop_con1();
        }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值