4

抽象类中 mustoverride/overridable 方法的最佳实践是什么,它什么都不返回。继承这个抽象类的具体类可以决定它是否需要该功能,并且可以根据需要覆盖。

现在我明白这是一个接口的功能,但是抽象类中有很多管道代码需要“隐藏”才能实现它。

我的问题是在您的项目中使用这些方法是不好的设计吗?

示例 1 - Concrete 类确实需要实现,但被迫重写该方法。

(抽象的)

Friend MustOverride Function GetTitle() As String

(具体的)

Friend Overrides Function GetTitle() As String 
        Return nothing
End Function

示例 2 - 如果需要,具体类可以覆盖该方法,但抽象类包含一个不返回任何内容的方法。

(抽象的)

Friend Overridable Function GetTitle() As String
        Return nothing
End Function

(具体的)

Friend Overrides Function GetTitle() As String
        Return "Title"
End Function
4

1 回答 1

3

如何表示“我不知道”完全由您决定。但是从抽象基类返回 Nothing 是一个非常糟糕的习惯。当从您的类派生的程序员或编写客户端代码的程序员没有意识到 Nothing 是可能的值时,很可能在客户端代码中生成 NullReferenceException。NRE 是一个糟糕的诊断异常,CLR 无法给出任何有意义的提示。例如,它不可能命名存储 null 的变量,它知道Nothing

这变得特别难以诊断,因为产生的空值至少与出错的地方相距两个级别。背负崩溃的用户可能不得不与三个程序员交谈才能找到问题的根源。并且最终让你接电话会很不高兴。

如果您不能提供成员的有意义的实现,那么请毫不犹豫地将其声明为抽象的。这样可以确保不会是您与生气的用户交谈。返回 String.Empty 是一种替代方法。也许这对您的设计有意义,我无法猜测。

于 2013-06-27T13:36:43.473 回答