首页技术delegate delegate和event有什么区别

delegate delegate和event有什么区别

编程之家2026-06-031197次浏览

各位老铁们好,相信很多人对delegate都不是特别的了解,因此呢,今天就来为大家分享下关于delegate以及delegate和event有什么区别的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

delegate delegate和event有什么区别

Delegate是什么,举例说明!

Delegate是什么?

对微软来说,一个delegate声明指定了一个相关的类型,你可以使用这一类型来封装一个含有特定标记的方法。一个delegate实例可以封装一个静态或一个实例方法。概略的说,Delegates就好象是C++中的函数指针;然而,delegates属于安全和保护类型。

我的采访是通过电话进行,所以我可以很容易和轻松地阐述这些定义。透明和详尽的解释是有必要的。然而,更贴切delegates的定义是,即使在没有对目标对象(target object)有任何了解的情况下,也可以随时使用一些方法,这样的方法即为delegates。很多开发人员通常将它们说成回调函数(callback functions)。现在让我们看一个范例,以更好理解它的应用。

使用中的Delegates

我们的范例程序开始于两个简单的C#类,这两个类包含一个方法以通过控制台来显示信息:

public class DelegateClass1{

delegate delegate和event有什么区别

public void exampleMethod1(String passedString){

Console.WriteLine(passedString);}

}

public class DelegateClass2{

public void exampleMethod2(String passedString){

Console.WriteLine(passedString);}

delegate delegate和event有什么区别

}

请注意到,这两个类执行类似的方法。这些方法具有不同的名称,但它们的标记和实体都相同。你可以使用一个delegate来结合这两个方法,实现过程是通过定义一个从这两个方法的通常特性中抽象出新的数据类型。也就是,它们都将一个简单的字符作为一个变量并返回void。C# delegate关键词使得这些变成可能:

public delegate void example(String passedString);

例如,使用这一新的数据类型声明,我们可以通过一个通常的抽象来调用这两个方法。下面的C#控制台程序利用了我们的delegate范例来调用这两个类的方法:

public class TestExampleDelegate{

public delegate void example(String passedString);

public static void Main(string[] args){

example[] items= new example[2];

items[0]= new example(new DelegateClass1().exampleMethod1);

items[1]= new example(new DelegateClass2().exampleMethod2);

for(int i= 0; i< items.Length; i++){

items[i]("Builder.com Rules!");

}}}

以上代码建立了一个数组的范例对象,并使用这些类中的方法实例化这些对象。由于忽略了括号,范例对象被一个调用方法处理。代码的执行结果显示了文本中。

(注意:Delegates不属于C#的细节;它们是.NET Framework的标准部分,所以你可以使用其它的语言,比如VB.NET或者J#。)

在任何地方都可以使用Delegates

在这一点上,也许你只知道有这样一回事,但却没有察觉它在你的程序中的应用。虽然你没有建立自己的delegates,但如果经常使用事件时你会使用到它们。一个极好的例子就是ASP.NET中使用的事件。在后台使用的Delegates围绕着事件工作。事件使用一个标记,你也可以在一个线程结构中找到delegates。

接口(interface)

你必须注意的另一个点是一个delegate和一个接口之间的相似性,因为它们都将规范和执行分离开来。它们允许开发人员建立与规范相符合的执行。除此之外,方法标记必须是被指定和相兼容。

所以,你什么时候使用接口?以及你什么时候使用delegates?微软提供了以下的指导思想。

在以下情况下使用Delegates很有用:

调用一个单一方法。

一个类要进行方法规范(method specification)的多种执行。

使用一个静态方法来执行规范。

想获得类似事件设计的模式。

调用者没有必要知道或获得方法定义的对象。

执行的提供者想将规范的执行“分发”成一些选择性的部分。

在以下情况下使用接口非常有好处:

规范指定一套即将被调用的方法。

特别的,一个类只执行规范一次。

接口的调用者想通过接口类型以获得其它接口或类。

Trackback:

什么是delegate

delegate定义:

.Net中的委托类似于 C或 C++中的函数指针。使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。与 C或 C++中的函数指针不同,委托是面向对象、类型安全的。

委托声明定义一种类型,它用一组特定的参数以及返回类型封装方法。对于静态方法,委托对象封装要调用的方法。对于实例方法,委托对象同时封装一个实例和该实例上的一个方法。如果您有一个委托对象和一组适当的参数,则可以用这些参数调用该委托。

委托的一个有趣且有用的属性是,它不知道或不关心自己引用的对象的类。任何对象都可以;只是方法的参数类型和返回类型必须与委托的参数类型和返回类型相匹配。这使得委托完全适合“匿名”调用。

delegate包含的词根

delegate,是委派代表的意思,de+leg+ate, de-是表示‘去掉,向外’的前缀,leg-是表示‘口头的、法律的’词根,毕竟古时候所谓的法律不就是国王的‘口谕’嘛,所以,leg-同时有‘口头的’和‘法律’的含义。delegate,合起来就是‘向外派驻法律人员’的含义,更多单词有:

deficit,赤字,不足额,逆差

debug,调试,字面是‘去掉虫子’

lecture,演讲,讲课

lecturer,演讲人

legal,法律的

illegal,非法的,

delegate,委派代表

delegated,坚定的,效忠的

关于delegate到此分享完毕,希望能帮助到您。

java api文档在哪(在线api文档)java+ssm?java三大框架ssm过时吗