【问题标题】:Can Someone Explain MustOverride?有人可以解释 MustOverride 吗?
【发布时间】:2010-12-13 19:09:23
【问题描述】:

谁能解释一下 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?​​p>

请原谅我的无知。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      假设在您的示例中,如果您希望从 RoomFactory 类创建的所有 Room 对象返回其大小。你可以在 Roomfactory 中创建一个必须覆盖的函数,比如 ReturnSize,任何继承自该函数的房间都应该实现这个函数。

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

      希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        MustOverride 指定属性或过程未在此类中实现,必须在派生类中覆盖才能使用。

        【讨论】:

          【解决方案4】:

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

          在您的工厂情况下,我建议使用接口而不是抽象类,但在其他情况下它是有意义的。 System.Text.Encoding 是抽象类的一个很好的例子,System.IO.Stream 也是。

          【讨论】:

          • 谢谢托尼,基本上是在基类中公开功能(通用功能) - 将其推高。至少我是这样理解的,而且似乎是这样。非常感谢。感谢您提供有关工厂情况的提示。我不熟悉接口,但我会离开并做一些阅读,看看我能弄清楚什么。再次感谢。
          猜你喜欢
          • 2012-05-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多