委托和事件的使用,还有我怎么觉得委托中的方法可以直接使用,委托是在什么情况下用的啊,还有委托里面的参数跟事件中的参数有什么关联,,,求恶补委托和事件啊啊啊高手弄个简单易懂的说明,,,谢谢,C#新手!!

解决方案 »

  1.   

    事件处理的方法要与委托里面参数一致,也就是签名一致    delegate void MyDelegate(string msg);//定义委托
        class Program
        {
            static void Main(string[] args)
            {
                MyClass mc = new MyClass();
                mc.MyEvent += new MyDelegate(mc_MyEvent);//注册事件
                mc.Output(100);
            }        static void mc_MyEvent(string msg)
            {
                Console.WriteLine(msg+"已完成");//事件处理方法
            }
        }    class MyClass
        {
            public event MyDelegate MyEvent = null;        public void OnMyEvent(string msg)//触发事件
            {
                if (MyEvent!=null)
                {
                    MyEvent(msg);
                }
            }
            public void Output(int x)
            {
                Console.WriteLine(x);
                OnMyEvent("输出操作");
            }
        }
      

  2.   

    随便拖个服务器控件,他有很多事件,如何使用,怎么使用,弄明白.NET事件机制,
      

  3.   

    事件是一个关键字,委托也是一个关键字。
    委托的关键字最终让你一行创建类public delegate void d();
    实际上,这样创建了一个继承自多播委托的类型。public event d e;
    这里实际上,创建了一个特殊的属性,具有add,remove方法,+=和-=重载的特殊东西。
      

  4.   

    事件的语义很好理解:又有新鲜事了,感兴趣的处理一下!实现事件机制的思路是:把你们的方法给我,我来调用。于是.net引入委托的概念,对方法进行封装,委托还可以构成链。类的event成员从本质上说是方法,无非是在委托链上添加和移除委托。.net实现事件有标准的步骤,很容易掌握,楼主去搜一下
      

  5.   

    委托的本质正如“委托”两个字所说,就是委托。using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                DelegateClass delegateobject = new DelegateClass(new TargetClass());
                delegateobject.Invoke("Hello World!");
            }
        }    class DelegateClass
        {
            private TargetClass _obj;
            public DelegateClass(TargetClass obj) { _obj = obj; }
            public void Invoke(string Param)
            {
                _obj.TargetFunction(Param);
            }
        }    class TargetClass
        {
            public void TargetFunction(string Param)
            {
                Console.WriteLine(Param);
            }
        }
    }
    当我们调用最终的方法的时候,我们不是直接调用它,而是寻求一个代理。如上面的代码。这样做的好处是,最终的调用被解耦,我们可以传入不同的委托(一律都是调用Invoke()),而将委托对象作为参数传给调用者,实现调用不同的方法。
    而C#只是提供了一种语法,简化了包装一个代理调用对象的代码,如上不使用委托的代码,可以等价如下的代码:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                DelegateClass delegateobject = new DelegateClass(new TargetClass().TargetFunction);
                delegateobject.Invoke("Hello World!");
            }
        }    delegate void DelegateClass(string Param);    class TargetClass
        {
            public void TargetFunction(string Param)
            {
                Console.WriteLine(Param);
            }
        }
    }进而在使用的时候再简化为:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                DelegateClass delegateobject = new DelegateClass(new TargetClass().TargetFunction);
                delegateobject("Hello World!");
            }
        }    delegate void DelegateClass(string Param);    class TargetClass
        {
            public void TargetFunction(string Param)
            {
                Console.WriteLine(Param);
            }
        }
    }