Хорошо, это немного глупый вопрос, но я столкнулся с этим сегодня, и это несколько озадачивает меня, ПОЧЕМУ так будет.
Рассмотрим следующую структуру
Public Class Employee
Implements IPerson
Private _MyManager As Manager
Public Property MyManager() As Manager Implements IPerson.TheirLeader
Get
Return _MyManager
End Get
Set(ByVal value As Manager)
_MyManager = value
End Set
End Property
End Class
Public Class Manager
Implements IPerson, IAuthorityFigure
Private _MyBoss As Boss
Public Property MyBoss() As Boss Implements IPerson.TheirLeader
Get
Return _MyBoss
End Get
Set(ByVal value As Boss)
_MyBoss = value
End Set
End Property
End Class
Public Class Boss
Implements IPerson, IAuthorityFigure
'Implementation code here...
End Class
Public Interface IPerson
Property TheirLeader() As IAuthorityFigure
End Interface
Public Interface IAuthorityFigure
'Stuff here...
End Interface
Вот мой вопрос: я хочу, чтобы каждый человек реализовывал интерфейс IPerson, будь то сотрудник, начальник или менеджер. Однако у каждого из них есть атрибут, который относится к их лидеру (у сотрудников есть менеджер, у менеджеров есть начальник и т. Д.). Каждая реализация их лидера может потенциально отличаться, кроме того, что они реализуют интерфейс IAuthorityFigure. Я хочу, чтобы интерфейс IPerson имел свойство для IAuthorityFigure, но он выдает ошибку компилятора для меня, когда я реализую этот b / c, IAuthorityFigure не того типа, что Boss или Manager (даже если они реализуют интерфейс).
Итак, я делаю что-то не так, или это ограничение использования интерфейсов по сравнению с абстрактными классами. Если это ограничение, кто-нибудь может объяснить, почему это так?
Спасибо!