泛型函数中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
相关产品推荐
相关产品推荐

