【发布时间】:2016-01-07 10:37:58
【问题描述】:
当您想要实现一个接口并仍然继承具有共享方法的基类时,是否有访问基类方法的首选或最佳实践方式?除了让 Select Case 检查派生类的类型,是否也可以只使用下面的传递方法?
(这不是一个真正的项目,我试图通过创建尽可能小的示例来尽可能简化问题——因此它可能不是使用此类功能的最佳方式。)
Public Class Form1
Dim obj As ICharacter
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
obj = New Fighter
obj.Attack()
obj.Say("I am a fighter!")
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
obj = New Mage
obj.Attack()
obj.Say("I am a mage!")
End Sub
End Class
Interface ICharacter
Sub Attack()
Sub Say(ByVal Dialogue As String)
End Interface
Public Class BaseCharacter
Public Shared Sub Say(ByVal Dialogue As String)
Debug.WriteLine(Dialogue)
End Sub
End Class
Public Class Fighter
Inherits BaseCharacter
Implements ICharacter
Public Sub Attack() Implements ICharacter.Attack
Debug.WriteLine("This class swings a sword!")
End Sub
Public Overloads Sub Say(ByVal Dialogue As String) Implements ICharacter.Say
BaseCharacter.Say(Dialogue)
End Sub
End Class
Public Class Mage
Inherits BaseCharacter
Implements ICharacter
Public Sub Attack() Implements ICharacter.Attack
Debug.WriteLine("This class casts a spell!")
End Sub
Public Overloads Sub Say(ByVal Dialogue As String) Implements ICharacter.Say
BaseCharacter.Say(Dialogue)
End Sub
End Class
我正在寻找类似以下内容的替代品:
If TypeOf obj Is Mage Then
CType(obj, Mage).Say("I am a mage!")
ElseIf TypeOf obj Is Fighter Then
CType(obj, Fighter).Say("I am a fighter!")
End If
或:
Select Case obj.GetType()
Case GetType(Mage)
CType(obj, Mage).Say("I am a mage!")
Case GetType(Fighter)
CType(obj, Fighter).Say("I am a fighter!")
End Select
【问题讨论】:
-
你会在哪里实现这个逻辑?调用类还是基类内部?
标签: vb.net inheritance interface