2010-03-23 21 views
0

基類:泛型重載告訴我這是相同的函數。不同意

Class List(Of T) 
    Function Contains(ByVal value As T) As Boolean 

派生類:

Class Bar : List(Of Exception) ' Exception type as example ' 
    Function Contains(Of U)(ByVal value As U) As Boolean 

編譯器告訴我,那兩個是一樣的,所以我需要聲明過載/新第二個功能。

但我想用U來區分NullReferenceException,ArgumentNull Exception等類型(一個邏輯),但要離開基函數(不區分類型 - 其他邏輯)。

+2

Arrrrg,我的眼睛! vb仿製藥燃燒着我的眼睛! – Juliet 2010-04-01 20:53:06

回答

4

那麼相當於在C#編譯。我會說你應該避免這樣做,但是 - 如果它的行爲不同,給你的方法一個不同的名字。在派生類中通過類型參數重載很少是一個好主意 - 實際上從List<T>派生自己幾乎不是一個好主意。

在VB中,你必須聲明你明確超載 - 你是。您應該將Overloads添加到函數聲明中。基本上這種方法是而不是方法與基地Contains方法相同 - 它具有不同數量的類型參數(1而不是0)並且參數是不同類型的(U而不是T)。請注意,與您的標題相反,您的而不是將覆蓋任何內容。

你能否更多地指出你實際上想通過這門課取得怎樣的成績?我們可能會提出一個更好的方法。

0

如果您希望將不同的類型傳遞給類,那麼您可能希望在泛型聲明中使用where。這可能足以讓編譯器感到高興。

相關問題