2009-09-10 34 views
28

Gần đây tôi đã đọc về thư viện boost::statechart (máy trạng thái hữu hạn) và tôi thích khái niệm này.C# có bao gồm các máy trạng thái hữu hạn không?

C# có cơ chế tương tự không? Hoặc nó có thể được thực hiện bằng cách sử dụng một mẫu thiết kế cụ thể?

Trả lời

0

Có, C# có iterator blocks là các máy trạng thái do trình biên dịch tạo ra.

Nếu bạn muốn triển khai bạn sở hữu máy trạng thái, bạn có thể tạo các triển khai tùy chỉnh của các giao diện IEnumerable<T>IEnumerator<T>.

Cả hai cách tiếp cận này đều làm nổi bật việc triển khai khung thực thi .NET của iterator pattern.

+1

Thật nhanh chóng, cảm ơn phản hồi – Maciek

+14

Máy phát hiện không có máy trạng thái. Một số khái niệm cơ bản về FSM là trạng thái, quá trình chuyển đổi, bảo vệ chuyển tiếp, hành động và trạng thái phân cấp. Đây không phải là rõ ràng trong các khối lặp, vì vậy tôi không đồng ý rằng đây là một thực hiện FSM. – Henri

+31

Các khối Iterator được thực hiện như các máy trạng thái, nhưng điều đó không có nghĩa là chúng thích hợp để xây dựng một máy trạng thái tùy ý. Erik Lippert làm cho điểm này ở đây: http://stackoverflow.com/questions/1194853/implementing-a-state-machine-using-the-yield-keyword/1195205#1195205 –

8

Workflow Foundation (.NET 3.0) có quy trình làm việc của máy trạng thái. 4.0 không có chính xác cùng một điều hiện tại, nhưng bạn chắc chắn có thể tạo ra một dòng công việc máy nhà nước bằng cách sử dụng 4.0.

+1

.NET 4 Platform Update đi kèm với hỗ trợ máy trạng thái cho WF4, bây giờ. – Will

2

Những thứ gần FSM là luồng công việc trong .NET 3.5, tuy nhiên, luồng công việc cũng không chính xác là FSM.

Sức mạnh của việc sử dụng FSM là bạn có thể tạo chúng rõ ràng trong mã của bạn, có ít cơ hội tạo lỗi hơn. Bên cạnh đó, tất nhiên một số hệ thống là FSM của tự nhiên, do đó, nó là tự nhiên hơn để mã họ như vậy.

+15

FSM là viết tắt của Flying Spaghetti Monster. Tôi nghĩ bạn đã trả lời sai câu hỏi. –

+6

Tôi khá chắc chắn rằng anh ta không đề cập đến Quái vật Bay Spagetti và thay vào đó là đề cập đến Máy hữu hạn Nhà nước. –

6

Tôi duy trì một dự án nguồn mở thực hiện (trong số những thứ khác) một máy trạng thái hữu hạn chung cho .NET. Nó được xây dựng trên đầu trang của QuickGraph, vì vậy bạn sẽ nhận được nhiều thuật toán phân tích đồ thị miễn phí.

Xem this page để biết thêm thông tin về dự án và đặc biệt "Jolt.Automata : Finite State Machines" để biết thêm thông tin về tính năng này.

1

Windows Workflow Foundation (WF) là một phần của thư viện lớp cơ sở trong 3.0 và 3.5 bao gồm thiết kế quy trình làm việc của máy trạng thái để quản lý các máy trạng thái cho ứng dụng của bạn.

Chúng có luồng công việc được viết lại hoàn toàn cho bản phát hành 4.0 sắp tới và các lớp WF 4.0 mới không hỗ trợ các máy trạng thái, nhưng tất cả các lớp 3.0/3.5 vẫn được hỗ trợ đầy đủ dưới 4.0.

0

tôi đã viết một thư viện mã nguồn mở gọi YieldMachine mà mất lợi thế của khối iterator để làm cho văn bản máy nhà nước đơn giản hơn.

Tôi đã giải thích chi tiết hơn trong this answer.

Các vấn đề liên quan