【问题标题】:Static abstract objects with virtual methods具有虚拟方法的静态抽象对象
【发布时间】:2016-12-14 09:15:40
【问题描述】:

我正在处理一个个人项目,但遇到了问题。

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

所以我创建了一个带有属性和“默认”方法的基类。但是这个基类需要是抽象的。这些方法是虚拟的,因此它们可以被覆盖。

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

因此,例如,上面引用的对象是(为简单起见)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; 
}

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

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

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

【问题讨论】:

    标签: c# .net static virtual abstract


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。跟进问题。如果所有对象都是具有公共代码的单例,有没有办法让它们从父级继承所有单例模式,同时仍然单独成为单例?我基本上希望派生类实现单例模式,而不必为每个类重复它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 2011-07-18
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 2012-12-03
    相关资源
    最近更新 更多