C# 委托和事件&Java中的事件

 https://blog.youkuaiyun.com/pange1991/article/details/81259610.(java事件)

Net Framework的编码规范:

1. 委托类型的名称都应该以EventHandler结束。
2. 委托的原型定义:有一个void返回值,并接受两个输入参数:一个Object 类型,一个 EventArgs类型(或继承自EventArgs)。
3. 事件的命名为 委托去掉 EventHandler之后剩余的部分。
4. 继承自EventArgs的类型应该以EventArgs结尾。

委托

委托的声明方式和类完全不同,实际上,委托在编译的时候确实会编译成类。因为Delegate是一个类,所以在任何可以声明类的地方都可以声明委托。

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
 

class Program
{
    //声明委托
    delegate void MyDelegate(string message);

    public class Example
    {
        public void Method(string message)
        {
            Console.WriteLine(message);
        }
    }

    static void Main(string[] args)
    {
        Example example = new Example();
        //实例化委托并向委托添加方法
        MyDelegate myDelegate = new MyDelegate(example.Method);
        //调用委托
        myDelegate("Hello World!");//或者 myDelegate.invoke("Hello World!")
        Console.ReadKey();
    }
}

带返回值的委托
  当建立委托对象时,委托的返回值必须与委托方法相对应。使用下面的例子,方法将返回 “Hello Gnd” 。

class Program
{
    delegate string MyDelegate(string message);

    public class Example
    {
        public string Method(string name)
        {
            return "Hello " + name;
        }
    }

    static void Main(string[] args)
    {
        Example example = new Example();
        //绑定委托方法
        MyDelegate myDelegate = new MyDelegate(example.Method);
        //调用委托,获取返回值
        string message = myDelegate("Gnd");
        Console.WriteLine(message);
        Console.ReadKey();
    }
}

 

事件

事件能通过+=和-=两个方式注册或者注销对其处理的方法,使用+=与-=操作符的时候,系统会自动调用对应的 add_XXX、remove_XXX 进行处理。注意:在事件所处的对象之外,事件只能出现在+=,-=的左方。

public delegate void MyDelegate(string name);

public class PersonManager
{
    //声明事件
    public event MyDelegate MyEvent;

    //执行事件
    public void Execute(string name)
    {
        if (MyEvent != null)
            MyEvent(name);
    }
}

class Program
{
    static void Main(string[] args)
    {
        PersonManager personManager = new PersonManager();
        //绑定事件处理方法
        personManager.MyEvent += new MyDelegate(GetName);
        personManager.Execute("Gnd.");
        Console.ReadKey();
    }

    public static void GetName(string name)
    {
        Console.WriteLine("My name is " + name);
    }
}

 

深入了解委托和事件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值