4_委托

委托:
1.说明:
声明定义一种类型,它用一组特定的参数以及返回类型来封装方法。
---对于静态方法,委托对象封装要调用的方法。
---对于实例方法,委托对象同时封装一个实例和实例上的一个方法。
如果您有一个委托对象和一组适当的参数,就可以用这些参数调用改委托。
2.和函数指针比较
---完全的面向对象,使用安全的类型。
---允许在运行时,传入函数名称,动态决定调用的方法。
---委托实际上是一个类,任何可以声明类的地方,都可以声明委托。
3.委托的使用
声明:delegate 函数返回值 委托名称(函数参数列表)
使用:委托名称 委托变量 = new 委托名称(委托实例)
Eg:
delgegate void DelEat(string food)
static void zsEat(string food)
{
 ....
}
static void lsEat(string food)
{
 ....
}

DelEat zs = new DelEat(zsEat);
DelEat ls = new DelEat(lsEat);
4.委托链
---可以直接对委托变量建立链表,实现其增加或者删除。
Eg:
DelEat delchain;
delchain = zs + ls;
delchain("Apple");
delchain -=ls;
delchain("Banana");
5.匿名方法
DelEat delchain =null;
delchain += delegate(string food){console.writeLine("张三吃"+food);};
delchain += delegate(string food){console.writeLine("李四吃"+food);};
delchain("Apple");

6.实例方法
    class Man
    {
        private string name;
        public  Man(string name) //constructor
        {
            this.name = name;
        }
       
        public void SayWords(string words)
        {
            Console.WriteLine(name + "said : " + words);
        }
    }

    class In
    {
      
        public static void SayManyWords(string words,params ManSay[] manset)
        {
            if(manset != null)  //必须判断
            foreach (ManSay m in manset)
            {
                m(words);
            }
        }
        static void Main()
        {
            Man zs = new Man("zhang san ");
            Man ls = new Man("li si");
          
            //向很多人说东西
            ManSay delzs= new ManSay(zs.SayWords);
            ManSay dells = new ManSay(ls.SayWords);

            SayManyWords("HI", delzs, dells);

            SayManyWords("Nothing", null);
        }
    }
 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值