vb.net使用泛型扩展一个类

时间:2013-09-12 10:55:19

标签: vb.net generics

是否可以使用相同的泛型类扩展不同的类? 我试过这样的事情:

Public Class A
  Public Sub TestA()
    Debug.Print("Test A")
  End Sub
End Class

Public Class B(Of T)
  Public Sub TestB()
    Debug.Print("Test B")
  End Sub
End Class

Public Class C
  Inherits B(Of A)

  Public Sub TestC()
    TestA() '**<-- Thows error 'is not declared'** 
    TestB()
    Debug.Print("Test C")
  End Sub
End Class

我基本上有一些usercontrols,它们派生自Combobox或Textbox,我想要实现一些在基类中定义的函数(和接口)。在C ++中我会用多继承来做。

3 个答案:

答案 0 :(得分:4)

  

是否可以使用相同的泛型类扩展不同的类?

泛型不是缺乏多重继承的某种“解决方法”,不是。您的课程C并非来自A - 这只是意味着T B(Of T)中的A C A

您希望调用TestA()的哪个C实例?创建A的实例肯定不会创建B(Of T) ...

的实例

T {/ em> {{1}}在任何地方的事实应该是一个警告信号 - 通用但从不使用其泛型类型参数的类型通常是有问题的。< / p>

如果没有更多详细信息,很难确切地知道如何帮助您解决实际问题,但是当您还需要从不受您控制的其他类型派生时,您无法像这样添加公共基类

也许extension methods会有所帮助?

答案 1 :(得分:2)

你可以使你的Combobox和你的Textbox类实现相同的界面。

然后您可以在该接口类上定义扩展方法。

答案 2 :(得分:0)

感谢您的暗示我使用了扩展

Public Class Form1

    Public Interface IA
        Property val As String
    End Interface

    Public Class A
        Public Sub test()
            Debug.Print("test")
        End Sub
    End Class

    Public Class C
        Inherits A
        Implements IA

        Public Property val As String Implements IA.val

        Public Sub TestC()
            val = "testxxx"
            TestA()        
            test()
        End Sub
    End Class

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim ct As New C
        ct.TestC()
    End Sub
End Class

Module TestModule
    <Extension()>
    Public Sub TestA(ByVal pvIA As IA)
        Debug.Print(pvIA.val)
    End Sub
End Module

这样每个类都可以实现它自己的'父'(就像这里的A),我不需要为每个类实现TestA函数。

谢谢