0

所以我做了大量的工作,试图为一组通用的类创建一个接口。这个想法是创建一个每个类都可以在集合中使用的接口,但最终每个类都是不同的。原来接口不喜欢共享成员。我尝试了什么:

Public Interface ISomeInterface
Shared Property Meta() as Object
End Interface


Public Class A

Implements ISomeInterface
Shared Public Property Meta() as Object Implements ISomeInterFace.Meta
'Set/get methods
End Propery

Public Function Haduken() as Object
'perform Haduken
End Function
End Class


Public Class B

Implements ISomeInterface
Shared Public Property Meta() as Object Implements ISomeInterFace.Meta
'Set/get methods
End Propery

Public Function SonicBoom() as Object
'perform sonic boom
End Function
End Class

显然,如果我在这方面做了功课,我就会知道共享成员不能在接口中使用。我应该让各个类完全负责处理其共享成员吗?是否有另一种方法可以将与共享成员的耦合降至最低?大约有 20 个左右的类将实现一个接口。提前致谢。

4

2 回答 2

2

解决此问题的最简单方法是Private实现接口,该接口简单地转发给Shared成员

Public Shared Property Meta As Object
  ' Get / Set methods
End Property

Private Property MetaImpl() as Object Implements ISomeInterFace.Meta
  Get 
    return Meta
  End Get
  Set
    Meta = Value
  End Set
End Propery

此模式允许您维护相同的面向公众的 API 并仍然实现接口。

于 2011-09-30T16:13:42.307 回答
0

如果想法是接口的每个实现都应该使用自己的共享变量,那么 JaredPar 的方法是正确的。如果想法是接口的所有用户都应该看到相同的共享变量,而不管他们拥有什么实例(如果有的话),那么正确的方法是创建一个名称与接口相似的类,并使用那堂课。这就是 Enumerable<T>.Empty 或 Comparer<T>.Default 使用的方法。

于 2011-10-02T18:13:05.563 回答