处理接口时如何处理共享成员?

时间:2011-09-30 16:10:15

标签: vb.net interface static properties decoupling

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

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个左右的类将实现单个接口。提前谢谢。

2 个答案:

答案 0 :(得分: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并仍然实现该接口。

答案 1 :(得分:0)

如果想法是接口的每个实现都应该使用自己的共享变量,那么JaredPar的方法是正确的。如果想法是接口的所有用户都应该看到相同的共享变量,无论他们拥有什么实例(如果有的话),正确的方法是创建一个名称类似于接口的类,并使用共享成员那个班。这是例如使用的方法。可枚举< T> .Empty或Comparer< T> .Default。