有人可以解释MustOverride吗?

时间:2009-11-06 10:55:55

标签: .net asp.net vb.net oop

有人可以解释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 个答案:

答案 0 :(得分:10)

这样您就可以在基类中提供通用功能,但强制派生类本身可以实现特定的功能位。

在你的工厂情况下,我建议使用接口而不是抽象类,但在其他情况下,它是有道理的。 System.Text.Encoding是抽象类的一个很好的例子,就像System.IO.Stream一样。

答案 1 :(得分:4)

您可以将Overrideable用于在基类中具有默认实现的方法 如果没有(明智的)默认实现,请使用Mustoverride

答案 2 :(得分:3)

我不是VB.NET专家,但肯定做过C#。在C#中,等效的是抽象关键字。它应该用于您希望从RoomFactory类派生的所有类实现您定义为抽象的某些行为的情况。

假设在您的示例中,如果您希望从RoomFactory类继承的所有Room对象都返回其大小。您可以在Roomfactory中创建一个mustoverride函数,例如ReturnSize,并且从中继承的任何类型的房间都应该实现此函数。

你可以用接口做同样的事情。但是使用这样的MustInherit类允许您在RoomFactory中添加一些默认行为,这对所有房间都是通用的。

希望这有帮助。

答案 3 :(得分:1)

MustOverride指定在此类中未实现属性或过程,并且必须在派生类中重写它才能使用它。