2009-11-06 15 views
6

¿Alguien puede explicar no lo que hace MustOverride, pero por qué usarlo? ¿Es para exponer la función?¿Alguien puede explicar que debe anular?

I tienen dos clases, la primera (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 .. // 

segunda clase (habitaciones)

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 

En primer lugar, creo que esto es correcto, pero le gustaría algún consejo a la otra manera - el rendimiento etc, pero supongo que la pregunta principal es - ¿por qué utilizar el MustOverride?

Disculpe mi ignorancia aquí.

Respuesta

10

Es por lo que puede proporcionar una funcionalidad común en una clase base, pero la fuerza que las clases derivadas para implementar bits específicos de sí mismos funcionalidad.

En su situación fábrica se recomienda usar una interfaz en lugar de una clase abstracta, pero en otros casos, tiene sentido. System.Text.Encoding es un buen ejemplo de una clase abstracta, como es System.IO.Stream.

+0

Gracias a Tony, que básicamente es para exponer la función (la funcionalidad común) en la clase base - lo empuja hacia arriba. Así fue como lo entendí al menos y ese parece ser el caso. Muchas gracias. Gracias por los consejos sobre la situación de la fábrica. No estoy familiarizado con las interfaces, pero me iré y leeré un poco para ver qué puedo averiguar. Gracias de nuevo. – dooburt

1

MustOverride especifica que una propiedad o procedimiento no está implementado en esta clase y debe ser anulado en una clase derivada antes de que pueda ser utilizado.

4

Utilizaría Overrideable para un método que tiene una implementación predeterminada en la clase base.
Cuando no es posible la implementación predeterminada (sensible), use Mustoverride.

3

No soy experto pero seguramente VB.NET hecho C#. En C# el equivalente es palabra clave abstracta. Debería usarse en los casos en que desee que todas las clases derivadas de su clase RoomFactory implementen algún comportamiento que haya definido como abstracto.

Suponga en su ejemplo, si desea que todos los objetos Room creados heredados de la clase RoomFactory devuelvan su tamaño. Debería crear una función de supervisión del musto, digamos ReturnSize en Roomfactory y cualquier tipo de sala que herede de esto debería implementar esta función.

Puede hacer lo mismo con las interfaces. Pero el uso de dicha clase MustInherit le permite agregar algún comportamiento predeterminado en RoomFactory que será común a todas las salas.

Espero que esto ayude.

Cuestiones relacionadas