Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:基类中的静态成员_C#_Design Patterns - Fatal编程技术网

C#:基类中的静态成员

C#:基类中的静态成员,c#,design-patterns,C#,Design Patterns,我有跨派生类的不同实例的公共数据。 所以为了共享公共数据属性,我在基类中将它们设置为静态。 但是静态公共属性不能在接口中声明。 如果我们尝试,我们会得到错误: “无法实现接口成员,因为它是静态的。” 对于这种需求,是否有任何已知的设计模式或最佳实践?最好使用抽象基类。接口定义了接口。一旦有了“真实”的东西,不管是方法实现还是共享数据,您就需要一个类,在本例中是一个抽象类 另一种选择是保留接口,但添加singleton来保存与实现接口的类相关的数据。如果你需要使用一个接口,那么我认为这是一种方法。

我有跨派生类的不同实例的公共数据。 所以为了共享公共数据属性,我在基类中将它们设置为静态。 但是静态公共属性不能在接口中声明。 如果我们尝试,我们会得到错误:

“无法实现接口成员,因为它是静态的。”


对于这种需求,是否有任何已知的设计模式或最佳实践?

最好使用抽象基类。

接口定义了接口。一旦有了“真实”的东西,不管是方法实现还是共享数据,您就需要一个类,在本例中是一个抽象类

另一种选择是保留接口,但添加singleton来保存与实现接口的类相关的数据。如果你需要使用一个接口,那么我认为这是一种方法。只需命名singleton,就可以清楚地看到它在逻辑上链接到接口和文档,接口的实现应该使用它


在您的情况下,带数据的静态类可能就足够了,而不是完整的单例实现,但我在这里不讨论这个问题,整个“静态类与单例”是一个有争议的话题。

您应该使用一个抽象类来代替。