Например, у меня есть базовый класс с именем Animal.
Public MustInherit Class Animal
Public Property Name As String
Public Sub New(animalName As String)
Name = animalName
End Sub
Public Sub Sleep()
MsgBox("ZZZZZZZZZZZ")
End Sub
Public MustOverride Sub MakeSound()
End Class
Подклассы могут реализовывать один или несколько из следующих интерфейсов:
Public Interface IShed
Sub Shed()
End Interface
Public Interface IBeAJerk
Sub BeAJerk()
End Interface
У меня есть 3 подкласса:
Public Class Dog
Inherits Animal
Implements IShed
Public Sub New(dogName As String)
MyBase.New(dogName)
End Sub
Public Overrides Sub MakeSound()
MsgBox("Bark")
End Sub
Public Sub WagTail()
MsgBox("Wag")
End Sub
Public Sub DogShed() Implements IShed.Shed
MsgBox("Dog fur everywhere")
End Sub
End Class
Public Class Cat
Inherits Animal
Implements IShed
Implements IBeAJerk
Public Sub New(catName As String)
MyBase.New(catName)
End Sub
Public Overrides Sub MakeSound()
MsgBox("Meow")
End Sub
Public Sub Purr()
MsgBox("Purr")
End Sub
Public Sub CatShed() Implements IShed.Shed
MsgBox("Cat fur everywhere")
End Sub
Public Sub Ignore() Implements IBeAJerk.BeAJerk
MsgBox("Ignore owner")
End Sub
End Class
Public Class Snake
Inherits Animal
Implements IBeAJerk
Public Sub New(snakeName As String)
MyBase.New(snakeName)
End Sub
Public Overrides Sub MakeSound()
MsgBox("SSSSSS")
End Sub
Public Sub Slither()
MsgBox("Slither")
End Sub
Public Sub Bite() Implements IBeAJerk.BeAJerk
MsgBox("Bite owner")
End Sub
End Class
Теперь у меня есть метод, в котором я хочу принять животное (собаку или кошку), которое, как я знаю, реализует IShed. Есть ли способ добраться до интерфейса без определения типа животного? Было бы неплохо сделать что-то вроде:
Private Sub MakeAMess(sheddingAnimal As Animal.ThatImplementsIShed)
'I want to be able to access both IShed (Shed method) and
'Animal (Name property)
sheddingAnimal.Shed()
MsgBox(sheddingAnimal.Name & " made a mess!")
End Sub
Я не хочу делатьИнтерфейс IShed в другой абстрактный класс, потому что и Cat, и Snake должны реализовать интерфейс IBeAJerk.Но Змея не проливает.(Ну, на самом деле, я полагаю, змеи сбросили свою шкуру, но вы меня поняли.)
Спасибо за любую помощь!