回 帖 发 新 帖 刷新版面

主题:[原创]C# 中委托事件的实现

C# 中委托事件的实现
  今天早上老师刚讲过委托和事件,只感到听的云里雾里,不知道老师是故弄玄虚,还是真的是如此复杂。
   不管怎样,总算有了一点自已对委托及事件方面的认识,如果大家喜欢,不如跟贴,大家伙在一起讨论一下。欢迎大家提出观点,看法。
   完整的程序如下:
    using System;
//委托声明
delegate void Mydelegate();  
class MyEvent
{
    //事件声明
public event Mydelegate  sampleEvent;  
    
    //调用此方法触发事件
     public void testEvent()
    {
    if(sampleEvent!=null)
        sampleEvent();
    }
}
class MyMain
{
    static void Main()
    {
     //新建事件实例对象
     MyEvent met=new MyEvent();
    //    添加目标方法
        met.sampleEvent+=new Mydelegate(target);
        met.testEvent();
        
    
    
    }
    static void target()
    {
    Console.WriteLine("本方法是通过事件委托实现的;");
    }
}


//本实例经过已经过编译

回复列表 (共6个回复)

沙发

按照Microsoft的说法,委托实际上是一种“安全”的函数指针,也就是说它本质是函数指针,使用委托相等于调用函数。而事件是委托的一种使用。楼主的就是使用事件的。注意在不同的语言中添加事件所用语句不相同。C#用+=,VB用的是AddHandler方法

板凳

请楼上的给我讲讲什么是委托啊,我是菜鸟!!哈哈

3 楼

委托不就相当于C中的函数指针吗?

4 楼


你的老师非常不错。例子简洁清晰明了。不象其他例子冗长晦涩花里胡哨的。
你的例子一个点刺立马清晰明了。我也是初学者。
这个例子无可挑剔之处。两个字:完美。
由于我初学,想问+=这个赋值运算赋,先=后+,右结合,有无详细资料之处可学习?大家请畅所欲言的指教。谢谢。

5 楼

a+=b; 就是 a=a+b;

6 楼


// 带参数的例子

using System;
using System.Collections.Generic;
using System.Text;

namespace DelegateAndEventTest
{

    public delegate void MyDelegate(string message);

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

        // 调用此方法触发事件
        public void TriggerEvent()
        {
            for (int i = 0; i < 10; i++)
                if (simpleEvent != null)
                    simpleEvent(i.ToString());
        }
    }


    class Program
    {
        static void Main(string[] args)
        {
            // 新建事件实例对象
            MyEvent myEvent = new MyEvent();

            // 添加目标方法
            myEvent.simpleEvent+=new MyDelegate(Target);

            // 引发事件
            myEvent.TriggerEvent();

            System.Console.ReadLine();
        }

        public static void Target(string message)
        {
            System.Console.WriteLine(message);
        }
    }
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册