Delegate是啥,举例说明!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delegate是啥,举例说明!相关的知识,希望对你有一定的参考价值。

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

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

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

public class DelegateClass1

public void exampleMethod1(String passedString)

Console.WriteLine(passedString);



public class DelegateClass2

public void exampleMethod2(String passedString)

Console.WriteLine(passedString);



请注意到,这两个类执行类似的方法。这些方法具有不同的名称,但它们的标记和实体都相同。你可以使用一个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: http://tb.blog.csdn.net/TrackBack.aspx?PostId=44812
参考技术A Delegate是是一种引用类型。

用于声明委托。委托是一种引用类型,它引用类型的 Shared 方法或对象的实例方法。任何具有匹配参数类型和返回类型的过程均可用来创建此委托类的实例。然后就可以通过委托实例来调用过程。
[ <attrlist> ] [ accessmodifier ] _
[ Shadows ] Delegate [ Sub | Function ] name [( Of typeparamlist )] [([ parameterlist ])] [ As type ]

有人可以举例说明代表是啥吗?

【中文标题】有人可以举例说明代表是啥吗?【英文标题】:Can someone explain what a delegate is with an example?有人可以举例说明代表是什么吗? 【发布时间】:2009-09-11 03:02:37 【问题描述】:

我阅读了很多关于目标 c 代表的内容,但没有弄清楚。谁能解释一下 一个很好而准确的例子,以便我可以理解它。高级感谢您的回复。

【问题讨论】:

【参考方案1】:

Objective-C 中的委托本质上是指向另一个类用来通知它事件的对象的指针。

例如,A 班要求您指定一名代表。你告诉它 [this] 类 B 的实例就可以了。

[a setDelegate:b];

然后在 A 类的方法和动作中,它会像这样调用委托对象上的预定义方法:

-(void)actionFinished:(id)sender

    [delegate a:self finishedWithResult:RESULT_OK];

所以你的委托对象应该被实现来响应那个消息:

-(void)a:(A *)a finishedWithResult:(int)result  /* respond */ 

【讨论】:

【参考方案2】:

这是我给出的关于代表及其工作方式的答案:Parsing XML in Cocoa

它最常被称为“策略模式”,您可以在 Wikipedia 上阅读所有相关信息:http://en.wikipedia.org/wiki/Strategy_pattern

对象构成也略有不同:http://en.wikipedia.org/wiki/Object_composition

【讨论】:

以上是关于Delegate是啥,举例说明!的主要内容,如果未能解决你的问题,请参考以下文章

WatchKit 中 UIApplication.sharedApplication().delegate 的等价物是啥?

C#中代表DELEGATE的作用是啥

为何说C#中的delegate是类型安全的可管理的

CABasicAnimation的delegate的坑

iOS 委托代理与协议(Delegate and Protocol)

在 self.delegate 实现 UIAlertViewDelegate 协议的 alertView 中设置 delegate:self.delegate