有人能解释一下MustOverride吗?

6

请问有人能够解释一下MustOverride的作用是什么吗?而不是只解释它的含义。使用它的原因是什么?是为了暴露函数吗?

我有两个类,第一个是RoomFactory;

Public MustInherit Class RoomFactory : Inherits baseFactory
Private _roomid As Integer = 0
Private _roomname as String = ""

Public Sub New()

End Sub

Public Sub New(ByVal roomid As Integer, ByVal roomname As String)
    Me.RoomId = roomid
    Me.RoomName = roomname
End Sub

Public MustOverride Function CreateRoom(ByVal roomdetails As RoomFactory) As Integer
Public MustOverride Function IsRoomAvailable(ByVal roomdetails as RoomFactory) As Boolean
// .. properties removed for brevity .. //

二等舱(房间)

Public Class Room : Inherits RoomFactory
    Public Function CreateRoom(ByVal roomdetails As RoomFactory) As Integer
        Return 0
    End Function
    Public Function IsRoomAvailable(ByVal roomdetails As RoomFactory) As Boolean
        Return False
    End Function
End Class

首先,我认为这是正确的,但希望能得到其他方面的建议 - 如性能等。但我想主要问题是 - 为什么要使用MustOverride?请原谅我的无知。
4个回答

10

使用抽象类可以在基类中提供通用功能,但强制派生类自己实现特定的功能细节。

在您的工厂情况下,我建议使用接口而不是抽象类,但在其他情况下使用抽象类是有意义的。 System.Text.Encoding 是抽象类的一个很好的例子,System.IO.Stream也是如此。


感谢Tony,基本上是要暴露基类中的函数(共同功能)-将其向上推。至少我是这样理解的,而且似乎也是如此。非常感谢。感谢您关于工厂情况的提示。我不熟悉接口,但我会去阅读一些资料,看看我能找出什么。再次感谢。 - dooburt

5

当基类中有默认实现的方法时,你可以使用 Overrideable 修饰它。
如果没有(明智的)默认实现,则应使用 Mustoverride


3
我不是VB.NET专家,但我肯定会C#。在C#中,它的等效关键字是抽象(abstract)。当你希望所有从RoomFactory类派生出来的类都实现你定义的某种行为时,应该使用它。
例如,在你的例子中,如果你想让所有从RoomFactory类继承的Room对象返回其大小,则应该在RoomFactory中创建一个MustOverride函数,比如ReturnSize,并且任何以这个类为基类的房间类型都应该实现这个函数。
你也可以使用接口来实现同样的功能。但是,使用这样的MustInherit类允许你在RoomFactory中添加一些默认行为,这些行为将适用于所有的房间。
希望这可以帮到你。

2

MustOverride指定了一个属性或过程在这个类中没有被实现,在派生类中必须被重写才能使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接