具有虚拟方法的静态抽象对象

Static abstract objects with virtual methods

我正在做一个个人项目,我 运行 遇到了一个问题。

我有几个具有相同属性、方法等的对象。唯一不同的是它们的名称、属性值和方法的实现。他们还需要方法的通用默认实现。所以马上,接口是不可能的。

所以我用属性和 "default" 方法创建了一个基础 class。但是这个基数class需要是抽象的。这些方法是虚拟的,因此它们可以被覆盖。

我需要它们是静态的原因是对象将是其他对象的属性。

因此,例如,上面引用的对象是(为了简单起见)objX、objY、objZ。它们派生自它们的基础 objW。

objContainer 是一个完全不相关的对象,但它有一个 属性 类型的 objW,它是 objX、objY、objZ 的一个实例。

objX、objY 和 objZ 永远不会 改变。它们的属性都是只读的。因此实例 objContainer 的多个对象将具有 objX、objY 或 objZ。

public class objContainer1
{
    objW processor = new objY; 
}
public class objContainer2
{
    objW processor = new objY; 
}

我该怎么做?我想让它们保持静态,这样我就没有相同对象的多个实例,当它们完全相同时,真的。

我使用单例吗?工厂模式?

我不知道该往哪个方向发展(如果有的话)。也许我想多了,有一个非常简单的解决方案/

您想谨慎使用静态 classes。静态 classes 有明显的缺点,例如无法利用 class 继承的多态性,因为您不能从静态 class 继承。实际上,您唯一想要使用静态 class 的情况是,当您拥有一组相关工具之类的东西时,您希望在整个应用程序中使用这些工具,并且您不需要为其维护任何状态。想想 System.Math class,例如:一组可以在应用程序中的任何位置使用的数学函数。拥有一个 class 的实例实际上没有任何意义,而且会相当麻烦和不必要。

我建议坚持使用非静态 classes 并创建这些 classes 的实例。如果您应该只有一个 class 实例,那么您应该按照您的建议使用单例。