2009-11-06 38 views
6

Ai đó có thể giải thích không phải những gì MustOverride làm, nhưng tại sao lại sử dụng nó? Là nó để lộ chức năng?Ai đó có thể giải thích MustOverride?

Tôi có hai lớp, lớp đầu tiên (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 .. // 

hạng Nhì (Phòng)

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 

Đầu tiên, tôi nghĩ rằng đây là đúng, nhưng muốn lời khuyên nào cho khác - hiệu suất vv Nhưng tôi đoán câu hỏi chính là - tại sao sử dụng MustOverride?

Hãy tha thứ cho sự thiếu hiểu biết của tôi tại đây.

Trả lời

10

Để bạn có thể cung cấp chức năng phổ biến trong lớp cơ sở, nhưng buộc các lớp dẫn xuất phải thực hiện các bit chức năng cụ thể.

Trong trường hợp nhà máy của bạn, tôi khuyên bạn nên sử dụng giao diện chứ không phải lớp trừu tượng, nhưng trong các trường hợp khác, điều đó có ý nghĩa. System.Text.Encoding là một ví dụ điển hình về một lớp trừu tượng, như là System.IO.Stream.

+0

Cảm ơn Tony, về cơ bản nó là để lộ hàm (chức năng chung) trong lớp cơ sở - đẩy nó lên. Đó là cách tôi đã hiểu nó ít nhất và đó có vẻ là trường hợp. Cảm ơn nhiều. Cảm ơn các mẹo về tình hình nhà máy. Tôi không quen với các giao diện, nhưng tôi sẽ bỏ đi và đọc một số để xem những gì tôi có thể tìm ra. Cảm ơn bạn lần nữa. – dooburt

1

MustOverride chỉ định rằng thuộc tính hoặc thủ tục không được triển khai trong lớp này và phải được ghi đè trong lớp dẫn xuất trước khi nó có thể được sử dụng.

4

Bạn sẽ sử dụng Overrideable cho phương thức có triển khai mặc định trong lớp cơ sở.
Khi không thể thực hiện mặc định (hợp lý), hãy sử dụng Mustoverride.

3

Tôi không phải là chuyên gia VB.NET nhưng chắc chắn đã hoàn thành C#. Trong C# tương đương là từ khóa trừu tượng. Nó nên được sử dụng trong trường hợp bạn muốn tất cả các lớp bắt nguồn từ lớp RoomFactory của bạn để thực hiện một số hành vi mà bạn đã định nghĩa là trừu tượng.

Giả sử trong ví dụ của bạn, nếu bạn muốn tất cả các đối tượng Room được tạo kế thừa từ lớp RoomFactory để trả về kích thước của nó. Bạn sẽ tạo ra một hàm mustoverride nói ReturnSize trong Roomfactory và bất kỳ loại phòng nào thừa hưởng từ điều này sẽ thực hiện chức năng này.

Bạn có thể làm tương tự với giao diện. Nhưng sử dụng lớp MustInherit như vậy cho phép bạn thêm một số hành vi mặc định trong RoomFactory mà sẽ được phổ biến cho tất cả các phòng.

Hy vọng điều này sẽ hữu ích.

Các vấn đề liên quan