gpt4 book ai didi

vb.net - 具有约束的 VB 泛型——类型转换和继承?

转载 作者:行者123 更新时间:2023-12-01 15:16:15 26 4
gpt4 key购买 nike

以这个场景为例:

Public Interface IMyClass
End Interface

Public mustinherit class MyBaseClass : implements IMyClass
End Class

public class MyClass : inherits MyBaseClass
End Class

public class MyModel(of t as IMyClass)

private Dim _parameter as t

Public Sub New(byval parameter As t)
_parameter As t
End Sub
End class

在我的 Controller 中,我可以毫无问题地做到这一点:

Dim _myclass as IMyClass = new MyClass()

我可以做类似的事情吗:

Dim _myModel as MyModel(of IMyClass) = new MyModel(of MyClass)

???

我最初的想法是错误的,因为我认为转换可以自动完成,但似乎没有完成。有什么方法可以在 .NET 中实现相同的目的?

编辑我更新了 MyModel 类以显示更多我在做什么。我想限制我创建的实例,然后使用传统的非泛型代码进行缩小转换。基本上,我的部分 Razor View 需要显式模型,而这些 View 最终会呈现另一个将采用该模型并显示它的 View 。因为模型都实现或继承了实现 IMyClass 的类,所以所有方法都应该存在于所有实例上并且应该是可调用的,但类型不可互换。

最佳答案

让我们稍微修改一下MyModel,好吗?

Public Class MyModel(Of T As IMyClass)
Private _parameter As T

Public Sub Something(parameter As T)
_parameter = parameter
End Sub
End class

Public Class MyClassA : Inherits MyBaseClass
End Class

Public Class MyClassB : Inherits MyBaseClass
End Class

Dim _myModel As MyModel(Of IMyClass) = New MyModel(Of MyClassA)()
_myModel.Something(New MyClassB()) ' Boom!

如果允许赋值,最后一行会出现问题:MyMode(Of MyClassA)._parameter 的类型为 MyClassA 但最后一行会分配一个对象(无关)键入 MyClassB。这是非法的,因此 VB 禁止这样做。

关于vb.net - 具有约束的 VB 泛型——类型转换和继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15279507/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com