返回 nothing 的抽象类中mustoverride / overridable方法的最佳实践是什么?继承此抽象类的具体类可以决定它是否需要该功能,并可以根据需要进行覆盖。
现在我明白这是接口的功能,但抽象类中有很多管道代码需要“取消隐藏”来实现它。
我的问题是在项目中使用这些方法是不好的设计?
示例1 - Concrete类确实需要实现,但强制覆盖该方法。
(摘要)
Friend MustOverride Function GetTitle() As String
(混凝土)
Friend Overrides Function GetTitle() As String
Return nothing
End Function
示例2 - 如果需要,Concrete Class可以覆盖该方法,但是抽象类包含一个不返回任何内容的方法。
(摘要)
Friend Overridable Function GetTitle() As String
Return nothing
End Function
(混凝土)
Friend Overrides Function GetTitle() As String
Return "Title"
End Function
答案 0 :(得分:3)
由您决定如何表明“我不知道”,这取决于您。但是从一个抽象的基类中返回Nothing是一个非常糟糕的习惯。当从您的类派生的程序员或编写客户端代码的程序员没有意识到Nothing是可能的值时,它很容易在客户端代码中生成NullReferenceException。 NRE是诊断的糟糕的异常,CLR无法提供任何有意义的提示。它不可能命名存储null的变量,例如,它知道 Nothing 。
这尤其难以诊断,因为null至少生成两个级别,而不是出错的地方。陷入崩溃的用户可能不得不与三个程序员交谈,以找到问题的根源。最终让你接电话并不高兴。
如果您无法提供有意义的成员实现,那么永远不会犹豫将其声明为抽象。这可以确保不会与那些生气的用户交谈。返回String.Empty是另一种选择。也许它对你的设计有意义,我无法猜测。