通用重载告诉我这是相同的功能。不同意

时间:2010-03-23 11:33:54

标签: .net generics oop override

基类:

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 个答案:

答案 0 :(得分:4)

那么等效的肯定会在C#中编译。我会说你应该避免这样做 - 但如果它的表现不同,请给你的方法一个不同的名字。派生类中的类型参数重载很少是一个好主意 - 实际上从List<T>派生出来本身并不是一个好主意。

在VB中你必须声明你明确地超载 - 你是谁。您应该将Overloads添加到函数声明中。基本上这个方法与基本Contains方法相同 - 它具有不同数量的类型参数(1而不是0),并且参数具有不同的类型({{1而不是U)。请注意,与您的标题相反,您会覆盖任何内容。

你能否提供一些关于你真正想要通过这门课程实现什么的指示?我们或许能够提出更好的方法。

答案 1 :(得分:0)

如果您希望将不同的类型传递给该类,那么您可能希望在泛型声明中使用where。这可能足以让编译器感到高兴。