asp.net - 这种 ASP.NET 继承共享函数做法可以接受吗?

标签 asp.net inheritance architecture

我有一堆不同的表单,我想为其创建一个 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/

相关文章:

html - 如何在 Razor CheckBoxFor() 中设置 Bootstrap 复选框

javascript - 在 ASP.NET 中管理 AngularJS 网络应用程序(替代 RequireJS)

asp.net - 跨 ASP.NET 的多个数据库维护用户数据完整性

Java:具有具体实现的抽象枚举

java - 为什么公共(public)类需要在包中而不是它自己的包中导入?

architecture - 一个真正的领域模型 - 一个谬论?

asp.net - 选项卡控件项包含单独的页面

css - IE 6,7 是否支持背景颜色 :inherit; for CSS?

web-services - 如何在 RESTful Web 应用程序中映射不同的 UI View ?

android - Android 上的 Couchbase lite - 通用架构?