【问题标题】:Static class stored as a property存储为属性的静态类
【发布时间】:2014-08-18 13:23:30
【问题描述】:

我有一个名为State的静态抽象类,它定义了抽象方法start()update(),然后我有多个实现State的类。

现在我想创建一个类,我们称之为StateMachine,它有一个名为currentState 的属性。我希望能够将此属性设置为指向实现状态的静态类,这样我就可以运行 currentState.update() 之类的东西。

现在是我的问题:

房产的类型应该是什么?我会说状态,但我觉得还有更多的东西。另外,我将如何设置属性?是

currentState = ClassThatImplementsState;

一个有效的事情吗?

编辑:好的,所以我刚刚了解到您不能从 C# 中的静态类继承。我想知道一种做与此类似的事情的方法,它可以让我同时拥有多态性并且不必实例化状态对象。有这种事吗?

【问题讨论】:

  • c#中不能有静态抽象类
  • 属性应该是State
  • 您正在尝试实现状态机?很好,您可以使用相互递归函数(每个状态一个)来做到这一点 - 但通常都在同一个静态类中......
  • 是的。我刚刚意识到静态类不能在 C# 中继承。还有更多的选择来实现我正在做的事情吗?我可以使用只有静态方法的非静态类吗?
  • 不要使用静态类,也不要创建单例。他们愚蠢而烦人。至少在您了解静态类就像一个命名空间一样,用于保存 functions 而不是维护 state,并且只有在拥有多个有些东西会破坏它。

标签: c# static-class


【解决方案1】:

如果 Statestatic 类,则不能有多个“实现”类,即从它派生。另一方面,当它是一个 abstract 类时,您可以从它派生。但不能两者兼有。

编辑:我认为您真正想要的是 Singleton 而不是抽象或静态类。有关如何在 C# 中实现单例模式的提示,请参阅 http://msdn.microsoft.com/en-us/library/ff650316.aspx

编辑 2:如果您的应用程序是多线程的,请务必使用单例模式的线程安全变体。

【讨论】:

  • 另外,这应该是一条评论!
  • 是的,我正在寻找单身人士。由于静态类是单例的一种可能实现,但它们并不能真正让我做我想做的事,我想我会尝试另一种实现。很抱歉给大家带来了困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
  • 2011-06-11
  • 2016-04-06
  • 1970-01-01
  • 2014-09-10
  • 2011-07-29
  • 1970-01-01
相关资源
最近更新 更多