2010-05-07 72 views
1

我只是在how to pass a generic delegate as a parameter上找到答案。謝謝您的幫助。現在我需要知道如何將委託分配給另一個委託聲明。這可以做到嗎?你如何做一個委託給.NET 2.0代理的指派

Public Class MyClass 
    Public Delegate Function Getter(Of TResult)() As TResult  

    ''#the following code works. 
    Public Shared Sub MyMethod(Of TResult)(ByVal g As Getter(Of TResult)) 
     ''# I want to assign Getter = g ''#how do you do it. 
    End Sub 
End Class 

請注意,Getter現在是私人的。我怎麼能ASSIGN Getter = G

當我嘗試getter = g'我得到太少類型參數編譯錯誤。 當我嘗試Getter(Of TResult)= g'我得到Getter是一個類型,不能用作表達式。

你怎麼做到的?

賽斯

回答

1

你還不能。您的Getter(Of TResult)()委託不是您可以指定的變量。這更像是一個類定義。因此,首先,你還需要聲明一個代理變量,你可以使用:

Public Class MyClass 
    Public Delegate Function Getter(Of TResult)() As TResult  

    Private MyGetter As Getter(Of TResult) 

    Public Shared Sub MyMethod(Of TResult)(ByVal g As Getter(Of TResult)) 
     MyGetter = g 
    End Sub 
End Class 

請注意,您仍然對泛型類型的問題,因爲你申報的MyMethod(中TResult)泛型類型沒有連接到我剛剛添加的代理變量的類型。你必須讓整個類是通用的,而不是僅僅爲了工作的方法。

我也想知道爲什麼你不只是使用現有的Func(Of T)委託?

+0

Func(Of T)在NET 2中不可用。 – 2010-05-07 21:06:51

+0

@Seth好的。更新了您的問題標籤,以便我們可以知道該部分。 – 2010-05-07 21:14:14

+0

謝謝......我也更新了標題以反映這一點。 – 2010-05-09 11:35:00

2

我不太清楚你想做什麼 - 在你的代碼,Getter是一個類型的名稱(委託類型),而不是類的實例字段,你可以分配一些東西給。

您是否打算聲明一個事件(其他用戶可以註冊處理程序)?如果是這種情況,請參閱例如0123DN在MSDN。

+0

我簡化了一下。對MyClass.MyMethod的調用將如下所示。 MyClass.MyMethod(AddressOF SomeOtherProc) 我有一個類級別委託(Getter)與方法參數委託(g)具有完全相同的sig。我想要的結果是將Getter設置爲在MyMethod調用中設置的AddressOf g。我不是在這裏處理事件。 Seth – 2010-05-07 21:04:11

+0

@Seth:如果你不需要一個完整的事件,那麼你需要一個委託類型的字段(如Joel所示)。 – 2010-05-07 22:54:42