Включает ли C # конечные автоматы? - PullRequest
27 голосов
/ 10 сентября 2009

Я недавно читал о библиотеке boost::statechart (конечные автоматы), и мне понравилась эта концепция.

Есть ли в C # похожий механизм? Или это может быть реализовано с использованием определенного шаблона проектирования?

Ответы [ 7 ]

18 голосов
/ 30 июля 2011

.NET 4 Update 1 теперь поддерживает его в следующем классе: System.Activities.Statements.StateMachine

Вот учебник о том, как его использовать . Вот вам руки в лаборатории .

8 голосов
/ 10 сентября 2009

Workflow Foundation (.NET 3.0) имеет рабочий процесс конечного автомата. В настоящее время 4.0 не имеет точно такой же вещи, но вы определенно можете создать рабочий процесс конечного автомата, используя 4.0.

6 голосов
/ 06 декабря 2011

Checkless Stateless -> http://code.google.com/p/stateless/. Это легкая альтернатива более тяжелому WWF.

Вот пара статей автора инструмента:

Конечные автоматы в доменных моделях

Параметризованные триггеры и входящие состояния в лицах без гражданства

6 голосов
/ 07 декабря 2009

Я поддерживаю проект с открытым исходным кодом, который реализует (среди прочего) универсальный конечный автомат для .NET. Он построен поверх QuickGraph , поэтому вы получаете множество алгоритмов анализа графиков бесплатно.

См. на этой странице для получения дополнительной информации о проекте и, в частности, " Jolt. Автоматы: конечные автоматы " для получения дополнительной информации о функции.

2 голосов
/ 10 сентября 2009

То, что приближается к FSM, - это рабочие процессы в .NET 3.5, однако, рабочие процессы также не совсем FSM.

Сила использования автоматов FSM заключается в том, что вы можете создавать их явно в своем коде, имея меньше шансов на создание ошибок. Кроме того, конечно, некоторые системы по своей природе являются ФШМ, поэтому более естественно кодировать их следующим образом.

1 голос
/ 07 декабря 2009

Windows Workflow Foundation (WF), который является частью библиотеки базовых классов в 3.0 и 3.5, включает в себя дизайн рабочего процесса конечного автомата для управления конечными автоматами для ваших приложений.

Они полностью переписали рабочий процесс для предстоящего выпуска 4.0, а новые классы WF 4.0 не поддерживают машины состояний, но все классы 3.0 / 3.5 все еще полностью поддерживаются в 4.0.

0 голосов
/ 10 сентября 2009

Да, C # имеет блоков итераторов , которые являются конечными автоматами, генерируемыми компилятором.

Если вы хотите реализовать свой собственный конечный автомат, вы можете создавать собственные реализации интерфейсов IEnumerable<T> и IEnumerator<T>.

Оба эти подхода подчеркивают реализацию в .NET Framework шаблона итератора .

...