欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C# 委托和事件

程序员文章站 2024-02-25 21:27:39
...

 .Net Framework的编码规范:

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

C# 委托和事件

委托

委托的声明方式和类完全不同,实际上,委托在编译的时候确实会编译成类。因为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);
    }
}

 

深入了解委托和事件

相关标签: C#委托和事件