vb.net使用泛型扩展类

vb.net使用泛型扩展类,vb.net,generics,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 T

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

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
公共A类
公共子测试()
Debug.Print(“测试A”)
端接头
末级
公共B类(T类)
公共子测试b()
调试打印(“测试B”)
端接头
末级
公共C类
继承B(A的)
公共子测试c()
TestA()'**
是否可以用相同的泛型类扩展不同的类

泛型不是缺少多重继承的某种“变通方法”,不。你的类
C
不是从
a
派生出来的-它只是意味着
B(of t)
中的
t
C
的上下文中将是
a

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

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

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


也许会有帮助?

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


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

多亏了您的提示,我在使用扩展时得到了这个提示

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
公共类表单1
公共接口
属性值为字符串
端接口
公共A类
公共子测试()
调试打印(“测试”)
端接头
末级
公共C类
继承
执行IA
公共属性val作为字符串实现IA.val
公共子测试c()
val=“testxxx”
种皮()
测试()
端接头
末级
私有子表单1_Load(发送方作为System.Object,e作为System.EventArgs)处理MyBase.Load
将ct变暗为新的C
ct.TestC()
端接头
末级
模块测试模块
公共子测试(ByVal pvIA As IA)
Debug.Print(pvIA.val)
端接头
端模块
通过这种方式,每个类都可以实现自己的“父级”(就像这里的A),我不需要为每个类实现函数TestA


谢谢你

你可能想看看“混合”是的,你是对的。。。不知道我可以在接口上定义扩展方法。。。我试试看