C#的委托和事件

版权声明:所有的博客都是博主的个人笔记。。。。。 https://blog.csdn.net/qq_35976351/article/details/83536089

委托

委托相当于C++的函数指针或者函数的引用。

using System;

public class FunClass
{
    public void func1()
    {
        Console.WriteLine ("func 1");
    }

    public void func2()
    {
        Console.WriteLine ("func 2");
    }
}

public class Test
{
    public delegate void TestFunc();

    public static void func3()
    {
        Console.WriteLine ("func 3");
    }

    public static void Main()
    {
        FunClass funClass = new FunClass ();
        TestFunc testFunc1 = new TestFunc (funClass.func1);
        TestFunc testFunc2 = new TestFunc (funClass.func2);
        TestFunc testFunc3 = new TestFunc (func3);
        testFunc1 ();
        testFunc2 ();
        testFunc3 ();
        Console.ReadKey ();
    }
}

事件

C#典型的观察者模式,需要借助于委托实现。先声明一个委托类型,用于说明注册事件的类型,然后再对观察者的事件进行注册,调用时说明。
Sender相当于事件的发出者,Receiver相当于观察者。

using System;

public class Sender
{
    public delegate void SendMsg();
    public event SendMsg sendEvent;

    public void Send()
    {
        if (sendEvent == null)
        {
            Console.WriteLine ("No Event");
            Console.ReadKey ();
        }
        else
        {
            sendEvent ();
            Console.ReadKey ();
        }
    }
}

public class Receiver1
{
    public void recMsg()
    {
        Console.WriteLine ("recMsg 1 !");
    }
}

public class Recevier2
{
    public void recMsg()
    {
        Console.WriteLine ("recMsg 2 !");
    }
}

public class Test
{
    public static void Main()
    {
        Sender sender = new Sender ();
        sender.Send ();
        Receiver1 receiver1 = new Receiver1 ();
        Recevier2 receiver2 = new Recevier2 ();
        sender.sendEvent += new Sender.SendMsg (receiver1.recMsg);
        sender.sendEvent += new Sender.SendMsg (receiver2.recMsg);
        sender.Send ();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_35976351/article/details/83536089