2010-11-30 49 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);