2009-11-06 111 views
6

有人可以解释什么MustOverride没有,但为什么使用它?它是揭露这个功能吗?有人可以解释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?

请原谅我在这里无知。

回答

10

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

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

+0

谢谢托尼,基本上是揭示基类中的函数(普通功能) - 推动它。这至少是我的理解,似乎是这样。非常感谢。 感谢您对工厂情况的提示。我对界面并不熟悉,但我会走开并做一些阅读,看看我能弄清楚什么。 再次感谢。 – dooburt 2009-11-06 11:13:36

1

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

4

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

3

我不是VB.NET专家,但肯定做了C#。在C#中相当于抽象关键字。它应该用于你希望从你的RoomFactory类派生出来的所有类实现你定义为抽象的一些行为的情况。

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

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

希望这会有所帮助。