2

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

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

我基本上有一些用户控件,它们派生自 Combobox 或 Textbox,我希望两者都实现在基类中定义的一些函数(和接口)。在 C++ 中,我会使用多继承来实现。

4

3 回答 3

4

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

由于缺乏多重继承,泛型不是某种“解决方法”,不是。您的类C不是派生自A- 它只是意味着TinB(Of T)AC.

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

B(Of T)不在任何地方使用 的事实T应该是一个警告信号 - 泛型但从不使用其泛型类型参数的类型通常是有问题的。

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

也许扩展方法会有所帮助?

于 2013-09-12T10:58:35.163 回答
2

您可以让 Combobox 和 Textbox 类都实现相同的接口。

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

于 2013-09-12T11:02:00.730 回答
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。

谢谢你

于 2013-09-12T14:23:18.447 回答