我有一堆不同的表单,我想为其创建一个 MustInherit
基类。我希望它们都包含一个名为 GetForms()
的共享函数。我知道您不能声明共享函数 MustOverride
因此我在抽象类中执行了以下操作:
Public Shared Function GetForms() As List(Of OrderForm)
'to be overridden in child class'
Return Nothing
End Function
这在我的 child 类(class)中:
Public Overloads Shared Function GetForms() As List(Of OrderForm)
'do stuff'
End Function
这会导致问题出现吗?或者这是一个可以接受的解决方法吗?它有一种味道,但它会强制我的所有表单都包含共享的 GetForms 函数。
编辑我意识到,如果这对于接口(interface)来说是可能的,我会使用一个,但是你不能在接口(interface)中声明共享函数,我想确保这是一个共享函数。
最佳答案
这有一种味道,因为它产生了对代码行为的错误期望。
您提到这样做的原因是“它会强制我的所有表单都包含共享的 GetForms 函数”。这只是部分正确。是的,它们都具有 GetForms
函数,但您实际上并没有强制派生类实现它们自己的版本。如果您忘记在其中之一上实现该函数,您将调用基本版本,并且不会从编译器收到任何有关它的警告。
这就是气味:它实际上无法强制执行您想要的行为,但乍一看,它给人一种它可以的印象。 6 个月后,当您添加新的表单类型并且忘记了约定时,这将导致头痛。除非您在测试过程中开始得到不好的结果,否则您不会收到有关出现问题的警告。
如果你想强制行为,你必须使用实例成员来完成;使用 MustOverride
(抽象)函数或接口(interface)。
关于asp.net - 这种 ASP.NET 继承共享函数做法可以接受吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1217133/