Vb.net 在处理接口时,如何处理共享成员?

Vb.net 在处理接口时,如何处理共享成员?,vb.net,interface,static,properties,decoupling,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 Im

所以我做了大量的工作,试图为一组常见的类创建一个接口。其想法是制作一个接口,每个类都可以在集合中使用,但最终每个类都是不同的。结果表明,接口不喜欢共享成员。我尝试的是:

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

解决这一问题的最简单方法是使用
专用的
接口实现,该接口只需转发给
共享的
成员

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,并且仍然实现该接口

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

该接口是什么样子的?公共接口ISomeInterface私有属性MetaImpl()作为对象结束Interface@hydroparadise对于这个模式,接口根本不需要更改。问题是,您需要实例化派生类来访问共享成员。