这里是新的编码器,因此,如果这确实是一个显而易见的问题,我要提前致歉。我制作了一个名为IState的接口,IState的属性之一是Outputs,这是IState的列表。我计划使用大约4个不同的类来实现IState接口。但是,在两个类中,我希望能够覆盖Outputs属性,并将其作为字符串列表而不是IStates列表。这是否可能,或者有解决此问题的聪明方法?
下面是IState的代码。
Public Interface IState
Property Name As String
Property Outputs As List(Of IState)
Property OnScreen As String
Sub Update()
Sub OnSpace()
End Interface
答案 0 :(得分:1)
即使是使用属性而不是字段,您所建议的操作也无法完成。如果您的接口声明了特定类型的成员,则实现该接口的任何类型都必须实现该类型的成员。您可以像这样使您的界面通用:
Public Interface IState(Of T)
Property Name As String
Property Outputs As List(Of T)
Property OnScreen As String
Sub Update()
Sub OnSpace()
End Interface
,那么任何实现该接口的类都将指定T
本身。如果您想将T
用作该接口,则会遇到递归问题,因此我认为您可能不走运。您基本上是在要求能够实现一个接口而不执行它。答案是否定的,你不能。
答案 1 :(得分:0)
接口是属性,方法和事件及其签名(属性类型,方法参数顺序和类型等)的规范。您可以使用泛型作为动态定义新接口的方法,而泛型接口确实有用途,但是您会遇到IGeneric(Of Type1)
与IGeneric(OF Type2)
不同的问题。
除了不知道您要允许Outputs
属性是List(Of IState)
还是List(Of String)
的特定使用要求之外,很难构想出一种通用的解决方案。
一个通用的解决方案是将Outputs
类型的约束减少为仅是IList。这将允许您返回List(Of IState)
或List(Of String)
。但是,该实现也可以自由返回实现IList接口的任何其他类型。
Public Interface IState
Property Name As String
Property Outputs As IList
Property OnScreen As String
Sub Update()
Sub OnSpace()
End Interface
另一种方法是通过将Outputs
类型移动到从IState
继承而没有Outputs
属性的新接口类型来对Public Interface IState
Property Name As String
Property OnScreen As String
Sub Update()
Sub OnSpace()
End Interface
Public Interface IOutputString : Inherits IState
Property Outputs As List(Of String)
End Interface
Public Interface IOutputIState : Inherits IState
Property Outputs As List(Of IState)
End Interface
类型保持严格的限制。
IState
这样做的好处是您可以传递将以上任何接口实现为| pk | sk | GSI1 PK | GSI1 SK |
| 12345 | metadata | | | Age:13 | Last name: Singh | Name:Rohan | ...
| 12345 | schoolMeta | SchoolName: DPS | DPS#class5 | className:5 |
的类实例。如果需要访问Outputs属性,则可以尝试将值强制转换为IOutputXXXX类型之一。