C#委托和事件

C基础算法 cyanprobe 9年前 (2015-11-05) 2927次浏览 已收录 0个评论

委托实例:

下面的程序执行后输出为:张三吃西瓜,李四吃竹笋,张三吃傻鸟1,李四吃傻鸟1,座谈会结束。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace shijian
{
    class Program
    {
        static void eattoghter(string food, params mydelegate[] values)//定义一个可变数组
        {
            if (values == null)
            {
                Console.WriteLine("座谈会结束");
            }
            else
            {
                mydelegate eatall = null;
                foreach (mydelegate ac in values)
                {
                    eatall += ac;//通过遍历添加方法
                }
                eatall(food);//传入函数值
            }
        }
        delegate void mydelegate(string food);
        static void Main(string[] args)
        {
            man zs = new man("张三");
            man ls = new man("李四");
            mydelegate zsd = new mydelegate(zs.eat);
            mydelegate lsd = new mydelegate(ls.eat);
            zsd("西瓜");
            lsd("竹笋");
            eattoghter("傻鸟1",lsd,zsd);
            eattoghter(null,null);
        }
    }
   public class man
    { private string name;
        public  man (string name)
        {
            this.name = name;
        }
        public void eat(string food)
        {
            Console.WriteLine(name +"吃"+ food);
        }
    }
}

简单的事件举例:

以下程序输出:出版社已经发行了刊物,用户已经收。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace shijian2
{
 class Program
 {
 static void Main(string[] args)
 {
 publisher syf = new publisher();//新建一个实例
 subscriber fkwebs = new subscriber();
 syf.onpublish += new publisher.mydelegate(fkwebs.recive);
//发行者的的发行事件    pub类下的myaelegete实现委托(订阅者的行为)
 syf.issue();//调用执行事件
 }
 }
 class publisher//出版社类
 {
 public delegate void mydelegate();
 public event mydelegate onpublish;
 public void issue()
 {
 if (onpublish != null)//如果事件不为空执行
 {
 Console.WriteLine("出版社已经发行了刊物");
 onpublish();//执行事件
 }
 }
 }
 class subscriber//订阅者类
 {
 public void recive()
 {
 Console.WriteLine("用户已经收到");
 }
 }
}

CyanProbe , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C#委托和事件
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址