включает ли c # конечные автоматы?

<p>недавно я прочитал о библиотеке <code>boost::statechart</code> (конечные автоматы), и мне понравилась эта концепция. </p><p>есть ли в c # похожий механизм? или это может быть реализовано с использованием определенного шаблона проектирования?</p>

<p>да, в c # есть <a href="http://www.developerfusion.com/article/9397/iterator-blocks-in-c-2-autogenerated-state-machines/">блоки итераторов</a> которые являются конечными автоматами, генерируемыми компилятором. </p><p>если вы хотите реализовать свой собственный конечный автомат, вы можете создавать собственные реализации интерфейсов <code>ienumerable<t></code> и <code>ienumerator<t></code>.</p><p>оба эти подхода подчеркивают реализацию платформы .net шаблона <a href="http://en.wikipedia.org/wiki/iterator\_pattern">итератор</a> .</p>

<p>.net 4 update 1 теперь поддерживает его в следующем классе: <a href="http://msdn.microsoft.com/en-us/library/system.activities.statements.statemachine.aspx">system.activities.statements.statemachine</a> </p><p>вот <a href="http://msdn.microsoft.com/en-us/library/gg983472.aspx">учебник о том, как его использовать</a> . вот <a href="http://code.msdn.microsoft.com/windows-workflow-b4b808a8">руки в лаборатории</a> .</p>

<p> <a href="http://www.microsoft.com/uk/msdn/nuggets/nugget/48/windows-workflow-foundation-state-machine-workflows.aspx">workflow foundation (.net 3.0)</a> имеет рабочий процесс конечного автомата. в настоящее время 4.0 не имеет точно такой же вещи, но вы определенно можете создать рабочий процесс конечного автомата, используя 4.0. </p>

<p>я поддерживаю проект с открытым исходным кодом, который реализует (среди прочего) универсальный конечный автомат для .net. он построен поверх <a href="http://quickgraph.codeplex.com">quickgraph</a> , поэтому вы получаете множество алгоритмов анализа графиков бесплатно.</p><p>см. <a href="http://jolt.codeplex.com">эту страницу</a> для получения дополнительной информации о проекте и, в частности, " <a href="http://jolt.codeplex.com/wikipage?title=jolt.fsm">jolt.automata: конечные автоматы</a> " для получения дополнительной информации о функции.</p>

<p>проверьте без гражданства -> <a href="http://code.google.com/p/stateless/">http://code.google.com/p/stateless/</a> . это легкая альтернатива более тяжелому wwf.</p><p>вот пара статей автора инструмента:</p><p> <a href="http://blogs.msdn.com/b/nblumhardt/archive/2009/04/16/state-machines-in-domain-models.aspx">конечные автоматы в доменных моделях</a> </p><p> <a href="http://blogs.msdn.com/b/nblumhardt/archive/2009/08/30/parameterised-triggers-and-re-entrant-states-in-stateless-v2.aspx">параметризованные триггеры и входящие состояния в лицах без гражданства</a> </p>

<p>вещи, которые приближаются к fsm, - это рабочие процессы в .net 3.5, однако, рабочие процессы также не совсем fsm.</p><p>сила использования fsm заключается в том, что вы можете создавать их<strong> явно </strong>в своем коде, имея меньше шансов на создание ошибок. кроме того, конечно, некоторые системы по своей природе являются фшм, поэтому их кодирование более естественно.</p>

<p>windows workflow foundation (wf), который является частью библиотеки базовых классов в 3.0 и 3.5, включает в себя дизайн рабочего процесса конечного автомата для управления конечными автоматами для ваших приложений.</p><p>они полностью переписали рабочий процесс для предстоящего выпуска 4.0, а новые wf 4.0 классы изначально не поддерживают конечные автоматы, но все классы 3.0/3.5 все еще полностью поддерживаются в 4.0.</p>