Я пытаюсь вернуться в VB.Net (прошло некоторое время) и, похоже, не могу обойти эту простую проблему.
Вот мой абстрактный базовый класс с его интерфейсом:
Imports VBRefresh.Animal
Public Interface IAnimal
ReadOnly Property AnimalType() As TypeOfAnimal
Property IsAlive As Boolean
End Interface
Public MustInherit Class Animal
Implements IAnimal
Public Enum TypeOfAnimal
Insect
Mammal
Fish
Bird
Reptile
End Enum
Private _animalType As TypeOfAnimal
Public ReadOnly Property AnimalType As TypeOfAnimal Implements IAnimal.AnimalType
Get
Return _animalType
End Get
End Property
Private _isAlive As Boolean
Public Property IsAlive() As Boolean Implements IAnimal.IsAlive
Get
Return _isAlive
End Get
Set(ByVal value As Boolean)
_isAlive = value
End Set
End Property
Public Sub New(animalType As TypeOfAnimal)
_animalType = animalType
End Sub
End Class
И вот два производных класса (из которых Cow
расширяет IAnimal
):
Public Interface ICow
Inherits IAnimal
Property FriendlyName As String
End Interface
Public Class Cow
Inherits Animal
Implements ICow
Public Sub New()
MyBase.New(TypeOfAnimal.Mammal)
End Sub
Private _friendlyName As String
Public Property FriendlyName As String Implements ICow.FriendlyName
Get
Return _friendlyName
End Get
Set(value As String)
_friendlyName = value
End Set
End Property
End Class
Public Class Eagle
Inherits Animal
Public Sub New()
MyBase.New(TypeOfAnimal.Bird)
End Sub
End Class
Я пытаюсь изменить тип myAnimal
на Cow
, чтобы я мог получить доступ к его свойству FriendlyName
, но я не могу заставить его работать без
- Создание отдельного объекта и установка его.
Объявление
FriendlyName
в интерфейсеIAnimal
. Я пытался преобразоватьmyAnimal
вICow
, но это не дает мне доступа к свойствуFriendlyName
?Private Sub Main_Load(sender As Object, e As EventArgs) Handles Me.Load Dim myAnimal As IAnimal = New Eagle myAnimal.IsAlive = True myAnimal = New Cow myAnimal.FriendlyName = "Bella" 'this line doesn't work Dim myCow As ICow = New Cow myCow.FriendlyName = "Bella" MessageBox.Show(myAnimal.AnimalType.ToString) End Sub
Наверное, что-то глупое, но у меня заканчиваются варианты.