2009-09-10 15 views
28

私は最近boost::statechartライブラリ(有限状態マシン)について読んだことがあります。私はこのコンセプトが大好きです。C#には有限状態マシンが含まれていますか?

C#にも同様のメカニズムがありますか?または、特定のデザインパターンを使用して実装できますか?

答えて

0

はい、C#のコンパイラ生成ステートマシンはiterator blocksです。

独自のステートマシンを実装する場合は、IEnumerable<T>IEnumerator<T>インターフェイスのカスタム実装を作成できます。

どちらのアプローチも、.NETフレームワークのiterator patternの実装を強調しています。

+1

すごく早く、応答のためにありがとう – Maciek

+14

イテレータははるかに状態機械ではありません。 FSMのいくつかの基本的な概念は、状態、遷移、遷移ガード、アクションおよび階層状態である。これらは反復子ブロックで明示的ではないので、これがFSMの実装であることに同意しません。 – Henri

+31

イテレータブロックはステートマシンとして実装されていますが、任意のステートマシンを構築するのに適しているわけではありません。 Erik Lippertはここにこの点を書いています:http://stackoverflow.com/questions/1194853/implementing-a-state-machine-using-the-yield-keyword/1195205#1195205 –

8

Workflow Foundation (.NET 3.0)には、ステートマシンワークフローがあります。 4.0は現在まったく同じものを持っていませんが、4.0を使って状態マシンのワークフローを作成することは間違いありません。

+1

.NET 4 Platform Updateには、WF4の状態マシンサポートが付属しています。 – Will

2

FSMに近いものは.NET 3.5のワークフローですが、ワークフローも正確にFSMではありません。

FSMを使用すると、コードにを明示的に作成でき、バグを作成する機会が少なくなります。それに、もちろん、いくつかのシステムは本質的にFSMであるため、そういうものをコード化するのが自然です。

+15

FSMはFlying Spaghetti Monsterの略です。私はあなたが間違った質問に答えたと思います。 –

+6

私は彼がフライングスパゲッティモンスターに言及していなかったと確信している代わりに、有限状態機械を指していた。 –

6

私は、(とりわけ).NET用の汎用有限状態マシンを実装するオープンソースプロジェクトを維持しています。これはQuickGraphの上に構築されているので、多くのグラフ解析アルゴリズムを無料で入手できます。

このプロジェクトの詳細については、this pageを、詳細については、Jolt.Automata : Finite State Machinesを参照してください。

1

3.0および3.5の基本クラスライブラリの一部であるWindows Workflow Foundation(WF)には、アプリケーションのステートマシンを管理するステートマシンワークフロー設計が含まれています。

今後の4.0リリースではワークフローが完全に書き直されており、新しいWF 4.0クラスは状態マシンをネイティブにサポートしていませんが、3.0/3.5クラスはすべて4.0で完全にサポートされています。

0

私はステートマシンを書い作るために反復子ブロックを利用していますYieldMachineと呼ばれるオープンソースのライブラリを書きました簡単です。

詳しくは、this answerで説明しました。

関連する問題