2010-11-30 51 views
0

我想读一些我没有写的代码。在课程的主体中,有以下两行。关于代表的问题

// RenderingService callbacks 
protected RenderingServiceResponsesDelegate renderingServiceResponsesDelegate; 
public delegate void RenderingServiceResponsesDelegate(Collection<RenderingServiceResponse> responses); 

现在,我从来没有在C#中使用委托,但读了三个步骤(声明,实例化和调用)。第二行看起来像声明,第一行看起来像实例化的第一步。在类的构造函数中,有以下行:

//Inside the constructor 
this.renderingServiceResponsesDelegate = renderingServiceResponsesDelegate; 

其中,renderingServiceResponsesDelegate是构造函数传递的参数。所以这将是实例化的第二部分。这是否正确理解?我被事物的秩序弄糊涂了。在声明之前,是否可以像在c#中那样实例化它?

回答

2

第二行是RenderingServiceResponsesDelegate的声明。

第一行是的声明。这不是实例化。

构造函数中的行为变量赋值 - 但在您的示例中,此值是从其他地方接收的。实例化意味着创建一个实例,这通常是通过关键字new完成的。在你的例子中,你没有提供执行实例化的代码。

+0

确定。我选择了代码,因为它非常大。还有另一个类来实例化这个类。它传递一个在自己的类中声明的方法。该行是:this.RenderingServiceResponseCallback – 2010-11-30 08:53:28

+0

谢谢。我认为我现在明白了代码以及它的结构。 – 2010-11-30 08:56:41

2

这是委托类型的声明:

public delegate void RenderingServiceResponsesDelegate(Collection<RenderingServiceResponse> responses); 

这是是委托类型的成员的声明:

protected RenderingServiceResponsesDelegate renderingServiceResponsesDelegate; 

这是一个先前实例化实例的分配该会员:

this.renderingServiceResponsesDelegate = renderingServiceResponsesDelegate; 

renderingServiceResponsesDelegate指向一个对象实例的特定方法或静态方法。

以前instanciation可能是这样的:那么

SomeClassThatHasTakesTheDelegateInstance c = new SomeClassThatHasTakesTheDelegateInstance (new RenderingServiceResponsesDelegate (this.SomeMethodThatMatchesTheDelegateSignature)); 

的调用是这样的:

this.renderingServiceResponsesDelegate(someResponses);