c# 委托 和 事件 自学理解

时间:2022-03-20 05:49:44
用了这么久,到今天才横下心来总结给大家,因为自己也才算明白了一二,贡献给和我一样的新手.

委托: 概念,简单点,有人会说书上也会说 像c++的指针,尼玛建议不要有这个概念容易让你绕路去理解它,所以我也没有自己
      概括也不知道怎么概括.那就不概括,就把他当做是一个很实在的东西.关键词 delegate

事件: 尼玛,真不想多说什么.只要你是程序员或者大二大三的学弟学妹,要不不知道我也无语  关键词 event

委托事件: 就是  委托 事件  哈哈自己理解

下面讲重点.

第一步: 定义委托    public delegate  void   mydelegate  ( 参数);
第二步: 定义委托事件  public event  mydelegate   myevent
第三步:定义事件处理程序可以是多个  public void  funone(参数)
                                   public void  funtow(参数)
                                   public void  funthree(参数)
第四部: 核心(同过委托事件把事件处理程序 弄给事件)
                              myevnt += mydelegate(funone) 
                              myevnt += mydelegate(funtwo) 以此类推
第五步:促发事件
                   myevent(参数),这样就会促发事件的处理程序有多少促发多少
      一般会把 这个封装成一个 促发事件

基本结束  应该很明了 如果还不懂不用担心,我就知道世界上有比我还笨的人哈哈
看下面

   如果用VS开发过程序的看下面c#

1 public delegate  void   EventHandler(object sender, EventArgs e)
2 public event EventHandler SelectedIndexChanged;
3 DropDownList1_SelectedIndexChanged(object sender, EventArgs e)(自定义的处理程序)
4 SelectedIndexChanged += EventHandler(DropDownList1_SelectedIndexChanged)
5 当你在界面上操作 DropDownList控件的时候 当值改变促发 SelectedIndexChanged

好了就这么多,如果到这里还不能理解  委托事件的话我也无语了

15 个解决方案

#1


我承认我比你笨!

#2


总结的不错

#3


切,卖弄

#4


我说说我的理解:
delegate关键词背后的东西
delegate void TestDelegate();这句话定义了一个委托,确切的说是一个类型(Type)
这个类型是编译器帮你从Delegate这个.Net类库里的类继承出来的
以下代码可以获得的输出:
            TestDelegate d=new Program.TestDelegate(Work);
            Console.WriteLine(d.GetType());
            Console.WriteLine(d.GetType().BaseType);
            Console.WriteLine(d.GetType().BaseType.BaseType);

TestCSharp.Program+TestDelegate
System.MulticastDelegate
System.Delegate

event关键词的背后:
事件其实就是一种特殊的属性,类型是委托类型,event关键词的作用在于隐藏委托类型的方法,使其变得简单,event修饰的委托只有+= -+这两种操作是被暴露的

#5


楼主净总结写表面的形式的东西,没有深入啊

会用,但是不知道是怎么回事

#6


人才啊,真是梦里寻他千百度!相见恨晚!  最好我只能说一句:好,很好,非常好!

#7


写代码做个Demo,能出来,能成功。 才算是初步理解了!

#8


c# 委托 和 事件 自学理解不错,感谢LZ

#9


引用楼主 production1986 的回复:
用了这么久,到今天才横下心来总结给大家,因为自己也才算明白了一二,贡献给和我一样的新手.

委托: 概念,简单点,有人会说书上也会说 像c++的指针,尼玛建议不要有这个概念容易让你绕路去理解它,所以我也没有自己
  概括也不知道怎么概括.那就不概括,就把他当做是一个很实在的东西.关键词 delegate

事件: 尼玛,真不想多说什么.只要你是程序员或者大二大三的学弟学妹,要不不知道我也……

给新手总结的不错,不过你忘了一句很重要的。。。。。。。。。
方法funone的签名必须与委托一模一样,也就是说方法的返回值类型和参数个数、类型必须与委托一样

#10


好,简单和你说说什么叫委托。

委托的意思就是“委托”。一个负责调用另一个类的方法的对象,我们通过调用它,委托它来调用真正的目标。

为了阐释什么是委托,我们不用委托,用对象来模拟:

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);
        }
    }
}

#11


现在 .NET 为你提供了简单的语法,对比下面的代码:
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);
        }
    }
}

#12


学习学习

#13


学习了。

#14


第四部: 核心(同过委托事件把事件处理程序 弄给事件)
  myevnt += mydelegate(funone)  
  myevnt += mydelegate(funtwo) 以此类推


貌似叫注册事件

#15


有了委托可以使你能够像传递参数一样传递方法,为什么要使用委托、事件,例如 一个Button,当你双击它时,会自动产生一个方法,你可以在这个方法里写自己的代码,当单击按钮时,就会调用这个方法,在这里微软开发这个button时,并不知道用户需要这个button在单击时执行什么,a程序员可能会执行开灯的方法,b可能会执行吃饭的方法,因此微软通过事件这种形式为程序员提供了这种可能, 

#1


我承认我比你笨!

#2


总结的不错

#3


切,卖弄

#4


我说说我的理解:
delegate关键词背后的东西
delegate void TestDelegate();这句话定义了一个委托,确切的说是一个类型(Type)
这个类型是编译器帮你从Delegate这个.Net类库里的类继承出来的
以下代码可以获得的输出:
            TestDelegate d=new Program.TestDelegate(Work);
            Console.WriteLine(d.GetType());
            Console.WriteLine(d.GetType().BaseType);
            Console.WriteLine(d.GetType().BaseType.BaseType);

TestCSharp.Program+TestDelegate
System.MulticastDelegate
System.Delegate

event关键词的背后:
事件其实就是一种特殊的属性,类型是委托类型,event关键词的作用在于隐藏委托类型的方法,使其变得简单,event修饰的委托只有+= -+这两种操作是被暴露的

#5


楼主净总结写表面的形式的东西,没有深入啊

会用,但是不知道是怎么回事

#6


人才啊,真是梦里寻他千百度!相见恨晚!  最好我只能说一句:好,很好,非常好!

#7


写代码做个Demo,能出来,能成功。 才算是初步理解了!

#8


c# 委托 和 事件 自学理解不错,感谢LZ

#9


引用楼主 production1986 的回复:
用了这么久,到今天才横下心来总结给大家,因为自己也才算明白了一二,贡献给和我一样的新手.

委托: 概念,简单点,有人会说书上也会说 像c++的指针,尼玛建议不要有这个概念容易让你绕路去理解它,所以我也没有自己
  概括也不知道怎么概括.那就不概括,就把他当做是一个很实在的东西.关键词 delegate

事件: 尼玛,真不想多说什么.只要你是程序员或者大二大三的学弟学妹,要不不知道我也……

给新手总结的不错,不过你忘了一句很重要的。。。。。。。。。
方法funone的签名必须与委托一模一样,也就是说方法的返回值类型和参数个数、类型必须与委托一样

#10


好,简单和你说说什么叫委托。

委托的意思就是“委托”。一个负责调用另一个类的方法的对象,我们通过调用它,委托它来调用真正的目标。

为了阐释什么是委托,我们不用委托,用对象来模拟:

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);
        }
    }
}

#11


现在 .NET 为你提供了简单的语法,对比下面的代码:
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);
        }
    }
}

#12


学习学习

#13


学习了。

#14


第四部: 核心(同过委托事件把事件处理程序 弄给事件)
  myevnt += mydelegate(funone)  
  myevnt += mydelegate(funtwo) 以此类推


貌似叫注册事件

#15


有了委托可以使你能够像传递参数一样传递方法,为什么要使用委托、事件,例如 一个Button,当你双击它时,会自动产生一个方法,你可以在这个方法里写自己的代码,当单击按钮时,就会调用这个方法,在这里微软开发这个button时,并不知道用户需要这个button在单击时执行什么,a程序员可能会执行开灯的方法,b可能会执行吃饭的方法,因此微软通过事件这种形式为程序员提供了这种可能,