C# Delegate 使用

Delegate, Event
Delegate其实就相当于C++/C里面的函数指针.用法如下:
1.最常规的使用
    class Program
    {
        public delegate void NumberChangedEventHandler(int number);
        class Publisher
        {
            public NumberChangedEventHandler NumberChanged;  
        }
        class Subscriber
        {
            public void OnNumberChanged(int number)
            {
                string message = "New value is " + number;
                Console.WriteLine(message);
            }
        }
        static void Main(string[] args)
        {
            Publisher pub = new Publisher();
            Subscriber sub1 = new Subscriber();
            Subscriber sub2 = new Subscriber();
            pub.NumberChanged += new NumberChangedEventHandler(sub1.OnNumberChanged);
            pub.NumberChanged += new NumberChangedEventHandler(sub2.OnNumberChanged);

            pub.NumberChanged(3);
            Console.WriteLine("over");
        }
    }
2.直接当成函数指针用
    class Program
    {
        public delegate void NumberChangedEventHandler(int number);
        class Publisher
        {
            public NumberChangedEventHandler NumberChanged;  
        }
        class Subscriber
        {
            public void OnNumberChanged(int number)
            {
                string message = "New value is " + number;
                Console.WriteLine(message);
            }
        }
        static void Main(string[] args)
        {
            Publisher pub = new Publisher();
            Subscriber sub1 = new Subscriber();
            pub.NumberChanged = sub1.OnNumberChanged;
            pub.NumberChanged(3);
        }
    }
3.异步调用
    class Program
    {
        public delegate void NumberChangedEventHandler(int number);
        class Publisher
        {
            public NumberChangedEventHandler NumberChanged;  
        }
        class Subscriber
        {
            public void OnNumberChanged(int number)
            {
                string message = "New value is " + number;
                Console.WriteLine(message);
            }
        }
        static void Main(string[] args)
        {
            Publisher pub = new Publisher();
            Subscriber sub1 = new Subscriber();
            pub.NumberChanged += new NumberChangedEventHandler(sub1.OnNumberChanged);
            pub.NumberChanged.BeginInvoke(3, null, null);
        }
    }

以上所述为怎么样,但如何用好,即将这个机制用在什么Context中,确又是另一门学问
Event就是delegate的一个具体应用,但是它的应用是比较简单的,只是加上了限制:此delegate(即event)只能在本类中调用 

C#中的委托(Delegate)是一种类型,它允许将方法作为参数传递给其他方法。委托可以看作是对方法的引用,可以用来实现回调函数和事件处理等功能。 在C#中,委托的定义需要使用`delegate`关键字。下面是一个简单的委托定义的示例: ```csharp delegate void MyDelegate(string message); ``` 上述代码定义了一个名为`MyDelegate`的委托类型,它接受一个`string`类型的参数,并且返回值为`void`。 使用委托时,可以在委托变量上使用`+=`操作符来添加方法,也可以使用`-=`操作符来移除方法。当调用委托时,将依次执行已添加的方法。 下面是一个使用委托的示例: ```csharp class Program { static void Main(string[] args) { MyDelegate delegate1 = Method1; MyDelegate delegate2 = Method2; delegate1("Hello"); delegate2("World"); } static void Method1(string message) { Console.WriteLine("Method1: " + message); } static void Method2(string message) { Console.WriteLine("Method2: " + message); } } ``` 运行上述代码将输出: ``` Method1: Hello Method2: World ``` 在上述示例中,我们首先定义了两个方法`Method1`和`Method2`,它们与委托`MyDelegate`具有相同的签名。然后我们创建了两个委托变量`delegate1`和`delegate2`,分别指向这两个方法。最后,我们通过调用委托变量来执行这两个方法。 需要注意的是,委托可以用来实现事件处理、多播委托等功能。还可以使用匿名方法或Lambda表达式来创建委托,使代码更加简洁和灵活。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值