You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

泛型函数中S继承T的类型约束实现可行性技术问询

当然可以实现这个泛型函数需求!

你想要的这种泛型方法完全可以实现——定义一个带约束的类型参数T,同时让另一个类型参数S必须是T本身或者T的派生类型,在VB.NET里只需要调整泛型约束的写法就行。

先给你一个完整的示例,假设T的约束是实现某个接口(你可以换成自己需要的基类或其他约束):

' 先定义T需要满足的约束接口
Public Interface IMyConstrainedType
    Sub Execute()
End Interface

' 正确的泛型方法定义
Public Sub MyGenericSub(Of T As IMyConstrainedType, S As T)()
    ' 这里可以安全地使用T和S的实例
    Dim baseInstance As T = Activator.CreateInstance(Of T)()
    Dim derivedInstance As S = Activator.CreateInstance(Of S)()
    
    baseInstance.Execute()
    derivedInstance.Execute() ' 因为S继承自T,所以能直接调用T的成员
End Sub

关键说明:

  • T的约束(比如上面的IMyConstrainedType)直接写在T的声明后面,满足你说的“T自身带有约束条件”的要求;
  • S的约束写成As T,就能强制S要么等于T,要么是T的派生类型,完全符合你的需求。

举个调用的例子更清楚:

' 定义一个符合T约束的类
Public Class BaseClass
    Implements IMyConstrainedType
    Public Sub Execute() Implements IMyConstrainedType.Execute
        Console.WriteLine("BaseClass executing")
    End Sub
End Class

' 定义BaseClass的派生类
Public Class DerivedClass
    Inherits BaseClass
End Class

' 合法调用:S等于T
MyGenericSub(Of BaseClass, BaseClass)()
' 合法调用:S是T的派生类
MyGenericSub(Of BaseClass, DerivedClass)()

别自责啦,泛型约束的语法一开始确实容易绕晕,多试几次就熟练了😉

内容的提问来源于stack exchange,提问作者Pierre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:49:02