2009-11-06 113 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中添加一些默認行爲,這對所有房間來說都是通用的。

希望這會有所幫助。