Универсальные интерфейсы и наследие - PullRequest
0 голосов
/ 28 ноября 2018

Вот моя проблема.

У меня есть эти 3 интерфейса:

IOperationInfoBase

IDaughterPlateOfMetalUnitInfo(Of T As IOperationInfoBase)

IMetalUnitInfo(Of T As IDaughterPlateOfMetalUnitInfo(Of IOperationInfoBase))

И еще один, который наследуется от IOperationInfoBase:

Public Interface IOperationInfo
  Inherits IOperationInfoBase

И затем эти2 класса:

Public Class DaughterPlateOfMetalUnitInfo
Implements IDaughterPlateOfMetalUnitInfo(Of IOperationInfo)

Public Class MetalUnitInfo
Implements IMetalUnitInfo(Of DaughterPlateOfMetalUnitInfo)

Первое правильно:

Public Property PlateName() As String Implements IDaughterPlateOfMetalUnitInfo(Of IOperationInfo).DaughterPlateName

Но это не сработает:

Public Property MetalUnitName() As String Implements IMetalUnitInfo(Of DaughterPlateOfMetalUnitInfo).MetalUnitName

Я застрял на следующемошибка:

Аргумент типа 'DaughterPlateOfMetalUnitInfo' не наследует и не реализует тип ограничения 'IDaughterPlateOfMetalUnitInfo (Of IOperationInfoBase)

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 28 ноября 2018

Ваше ограничение на IMetalUnitInfo требует, чтобы T было IDaughterPlateOfMetalUnitInfo(Of IOperationInfoBase), но вы предоставляете его IDaughterPlateOfMetalUnitInfo(Of IOperationInfo).

Общая ковариация предназначена для решения этой проблемы.Вам нужно внести изменения в IDaughterPlateOfMetalUnitInfo.

Interface IDaughterPlateOfMetalUnitInfo(Of Out T As IOperationInfoBase)

Тогда DaughterPlateOfMetalUnitInfo может удовлетворить ограничение, потому что IOperationInfo выводится больше, чем IOperationInfoBase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...