【问题标题】:Generic Interfaces and heritage通用接口和遗产
【发布时间】:2018-11-28 09:20:24
【问题描述】:

这是我的问题。

我有这 3 个接口:

IOperationInfoBase

IDaughterPlateOfMetalUnitInfo(Of T As IOperationInfoBase)

IMetalUnitInfo(Of T As IDaughterPlateOfMetalUnitInfo(Of IOperationInfoBase))

另一个继承自 IOperationInfoBase :

Public Interface IOperationInfo
  Inherits IOperationInfoBase

然后是这两个类:

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)”

谁能帮帮我?

【问题讨论】:

  • 能否将相关成员的声明也包括在内?
  • @jmcilhinney 对于问题案例,IMetalUnitInfo 中的简单字符串属性将显示错误。

标签: .net vb.net interface


【解决方案1】:

您对IMetalUnitInfo 的约束要求TIDaughterPlateOfMetalUnitInfo(Of IOperationInfoBase),但您提供的是IDaughterPlateOfMetalUnitInfo(Of IOperationInfo)

通用协方差旨在解决这个问题。您需要更改为IDaughterPlateOfMetalUnitInfo

Interface IDaughterPlateOfMetalUnitInfo(Of Out T As IOperationInfoBase)

那么,DaughterPlateOfMetalUnitInfo 可以满足约束条件,因为IOperationInfoIOperationInfoBase 派生更多。

【讨论】:

    猜你喜欢
    • 2017-10-22
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 2010-09-24
    • 2020-04-27
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多