C#是否包含有限状态机?

我最近读过boost::statechart库(有限状态机),我很喜欢这个概念。

C#有类似的机制吗? 或者可以使用特定的设计模式实现?

是的,C#有迭代器块 ,它们是编译器生成的状态机。

如果您希望实现自己的状态机,则可以创建IEnumerableIEnumerator接口的自定义实现。

这两种方法都突出了.NET框架对迭代器模式的实现。

.NET 4 Update 1现在支持以下类: System.Activities.Statements.StateMachine

这是一个如何使用它的教程 。 这是一个动手实验室 。

Workflow Foundation(.NET 3.0)具有状态机工作流。 4.0目前没有完全相同的东西,但你绝对可以使用4.0创建状态机工作流程。

我维护一个开源项目,该项目实现(除其他外).NET的通用有限状态机。 它建立在QuickGraph之上,因此您可以免费获得许多图形分析算法。

有关该项目的更多信息,请参阅此页面 ,特别是“ Jolt.Automata:有限状态机 ”,以获取有关该function的更多信息。

查看Stateless – > http://code.google.com/p/stateless/ 。 它是重型WWF的轻量级替代品。

以下是该工具的作者的几篇文章:

域模型中的状态机

无状态的参数化触发和重入状态

接近FSM的事情是.NET 3.5中的工作流程,但是,工作流程也不完全是FSM。

使用FSM的强大之处在于,您可以在代码中明确创建它们,从而减少创建错误的可能性。 此外,当然有些系统本质上是FSM,因此更自然地对它们进行编码。

Windows Workflow Foundation(WF)是3.0和3.5中基类库的一部分,它包括一个状态机工作流设计,用于管理应用程序的状态机。

他们完全重写了即将发布的4.0版本的工作流程,而新的WF 4.0类本身并不支持状态机,但4.0版本仍然完全支持所有3.0 / 3.5类。

我写了一个名为YieldMachine的开源库,它利用迭代器块使编写状态机更简单。

我在这个答案中更详细地解释了它。