是否可以使用相同的泛型类扩展不同的类? 我试过这样的事情:
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 ++中我会用多继承来做。
答案 0 :(得分:4)
是否可以使用相同的泛型类扩展不同的类?
泛型不是缺乏多重继承的某种“解决方法”,不是。您的课程C
并非来自A
- 这只是意味着T
B(Of T)
中的A
C
A
您希望调用TestA()
的哪个C
实例?创建A
的实例肯定不会创建B(Of T)
...
如果没有更多详细信息,很难确切地知道如何帮助您解决实际问题,但是当您还需要从不受您控制的其他类型派生时,您无法像这样添加公共基类 也许extension methods会有所帮助?T
{/ em> {{1}}在任何地方的事实应该是一个警告信号 - 通用但从不使用其泛型类型参数的类型通常是有问题的。< / p>
答案 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函数。
谢谢