gpt4 book ai didi

.net - 我可以使用 VB.NET 覆盖类中声明的变量吗?

转载 作者:行者123 更新时间:2023-12-01 22:44:28 24 4
gpt4 key购买 nike

我正在尝试为通用事件创建一个通用 Controller 类。但是这些这些事件仍然需要访问它们的类变量。所以我的想法是使用 ModelBaseclass 变量创建 Base Controller Class 作为 _ClassVar,它由所有其他类 Controller 类继承。但我希望派生的 Controller 类用它们需要的任何一个覆盖 _ClassVar。

我想这样做,这样 ControllerBaseClass 就可以拥有所有派生类将使用的所有通用函数。

型号:

Public Class ModelBaseClass
Public Overridable Function Foo() As String
Return "Name"
End Function
End Class

Public Class ModelDerivedClass1
Inherits ModelBaseClass
Public Overrides Function Foo() As String
Return "ModelDerivedClass1"
End Function
End Class

Public Class ModelDerivedClass2
Inherits ModelBaseClass
Public Overrides Function Foo() As String
Return "ModelDerivedClass2"
End Function
End Class

Controller :

Public Class ControllerBase
Public Overridable _ClassVar As ModelBaseClass <----
Public Function PrintFoo() As String
Return _ClassVar.Foo()
End Function
End Class

Public Class ControllerDerivedClass1
Inherits ControllerBase
Public Overrides _ClassVar As ModelDerivedClass1 <----
End Class

Public Class ControllerDerivedClass2
Inherits ControllerBase
Public Overrides _ClassVar As ModelDerivedClass2 <----
End Class

最佳答案

感谢polymorphism ,您没有理由必须这样做。

ModelDerivedClass1ModelDerivedClass2 都继承自 ModelBaseClass,因此将基类中的变量声明为 ModelBaseClass 类型将允许您存储任何这些类型的对象。在基类型 ModelBaseClass 中定义的任何方法在派生类型上自动可用。如果您需要调用仅在一种派生类型中定义的方法,则需要将该对象向上转换为更具体的类型:

DirectCast(_ClassVar, ModelDerivedClass1)


作为对您问题的更具体和更直接的回答,您不能覆盖变量声明。您必须将它们声明为属性才能覆盖它们的声明,即使这样,您也不能仅按返回类型覆盖。

关于.net - 我可以使用 VB.NET 覆盖类中声明的变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4462362/

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