每当我读到RE或者静态继承的类似主题时,答复通常都不支持(我们知道这一点),并且给出原因是因为这是一个糟糕的设计,可能有更好的方法来做到这一点。我很想找到一个更好的方式来做这件事,所以我愿意接受所有的建议 - 这就是我正在做的。C#替代虚拟静态方法和静态子类
我有一个没有实例数据的类。所有的方法都是静态的。我们称之为class BaseStatic
。我现在想要一个新的静态类(当然好几个,但让我们坚持一个)继承这个静态类并添加一些新的静态方法,我们称之为SubStatic
。
我希望消费者能写的是:
SubStatic.MethodFromSub();
也
SubStatic.MethodFromBase();
我知道我也可以这样写:
BaseStatic.MethodFromBase()
明确,但随后消费者知道哪些类实现了哪些方法。我不能用继承来做到这一点,因为我不能从另一个静态类继承。那么做一个更好的方法是什么?
现在,我知道我能有这些类的实例类,我可以定义的所有方法静态 - 这会给我我上述的行为,但会导致其他问题,即:
当我这样做:
SubStatic.MethodFromBase()
因为该方法是在父静态类运行(父的静态构造函数被调用)如果静态父方法之一,需要调用其它方法
SubStatic
静态构造函数不叫哪子类可以覆盖,我需要一个虚拟的静态方法在子类中。我知道我不能拥有。
这么差的设计显然 - 任何人都可以帮我重做吗?我知道我可以使用实例继承并正确使用虚拟方法(我以这种方式工作),但客户端代码总是需要创建一个实例(或者我想某个单例)。
您可以使用单例设计模式创建实例并将其返回给用户。这不会帮助你解决你的问题吗? – manman
是的 - 但是我仍然在创建一个实例,不是吗?此外,消费者将不得不编写:SomeClass.Instance.SomeMethod(),对吗? – RBrowning99
是的,你必须创建实例,但只有一次,然后你可以通过使用Lazy Loading模式来缓存它们。这是你可以继承的唯一方法。此外,这将导致更灵活的代码。 – manman