私は最近、boost::statechart
ライブラリ (有限状態マシン) について読みましたが、その概念が気に入りました。
C# にも同様のメカニズムがありますか? それとも、特定のデザイン パターンを使用して実装できますか?
私は最近、boost::statechart
ライブラリ (有限状態マシン) について読みましたが、その概念が気に入りました。
C# にも同様のメカニズムがありますか? それとも、特定のデザイン パターンを使用して実装できますか?
.NET 4 Update 1は、次のクラスでサポートされるようになりました: System.Activities.Statements.StateMachine
これは、その使用方法に関するチュートリアルです。これがハンズオンラボです。
Workflow Foundation (.NET 3.0)には、ステート マシン ワークフローがあります。4.0 には現在まったく同じものはありませんが、4.0 を使用してステート マシン ワークフローを確実に作成できます。
私は、(とりわけ) .NET 用の一般的な有限状態マシンを実装するオープンソース プロジェクトを維持しています。QuickGraphの上に構築されているため、多くのグラフ分析アルゴリズムを無料で利用できます。
プロジェクトの詳細については、このページを参照してください。具体的には、この機能の詳細については、「 Jolt.Automata : Finite State Machines」を参照してください。
Stateless を確認してください -> http://code.google.com/p/stateless/。重い WWF に代わる軽量の代替品です。
ツールの作成者によるいくつかの記事を次に示します。
FSM に近いものは .NET 3.5 のワークフローですが、ワークフローも厳密には FSM ではありません。
FSM を使用する利点は、バグを作成する可能性が少なく、コード内で明示的に作成できることです。さらに、もちろん一部のシステムは本質的に FSM であるため、そのようにコーディングする方が自然です。
3.0 および 3.5 の基本クラス ライブラリの一部である Windows Workflow Foundation (WF) には、アプリケーションのステート マシンを管理するためのステート マシン ワークフロー設計が含まれています。
今後の 4.0 リリースに向けてワークフローを完全に書き直しました。新しい WF 4.0 クラスはステートマシンをネイティブにサポートしていませんが、3.0/3.5 クラスはすべて 4.0 でも完全にサポートされています。
はい、C# には、コンパイラによって生成されたステート マシンである イテレータ ブロックがあります。
独自のステート マシンを実装する場合は、IEnumerable<T>
およびIEnumerator<T>
インターフェイスのカスタム実装を作成できます。
これらのアプローチは両方とも、.NET フレームワークの反復子パターンの実装を強調しています。