Общая перегрузка говорит мне, что это та же самая функция.Не согласен - PullRequest
0 голосов
/ 23 марта 2010

базовый класс:

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

компилятор говорит мне, что эти два одинаковы, поэтому мне нужно объявить Overloads / new эту вторую функцию.

Но я хочу использовать U, чтобы дифференцировать тип (одну логику), например NullReferenceException, ArgumentNull Exception и т. Д., Но хочу также оставить базовую функцию (без дифференцирования по типу - другая логика).

Ответы [ 2 ]

4 голосов
/ 23 марта 2010

Что ж, эквивалент, безусловно, компилируется в C #.Однако я бы сказал, что вам следует избегать этого - дать вашему методу другое имя, если он будет вести себя иначе.Перегрузка параметром типа в производном классе редко является хорошей идеей - и на самом деле вывод из List<T> сам по себе редко является хорошей идеей.

В VB вы должны объявить, что вы явно перегружены - чтоявляются.Вы должны добавить Overloads к объявлению функции.По сути, этот метод не такой же, как базовый метод Contains - он имеет другое количество параметров типа (1 вместо 0), а параметр другого типа (U вместо T).Обратите внимание, что вопреки вашему названию вы не переопределяете что-либо.

Можете ли вы дать больше сведений о том, чего вы на самом деле пытаетесь достичь с помощью этого класса?Возможно, мы сможем предложить лучший подход.

0 голосов
/ 02 апреля 2010

Если вы ожидаете передать другому типу другой класс, то вы можете использовать where в вашей общей декларации. Этого может быть достаточно для того, чтобы компилятор был счастлив.

...