日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET 状态机Automatonymous快速入门

發布時間:2023/12/4 asp.net 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET 状态机Automatonymous快速入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

介紹

Automatonymous是.NET開發人員的狀態機庫。它提供了一種流暢的語法來聲明狀態機,包括狀態,事件(支持觸發器和數據事件)以及狀態/事件活動。盡管Automatonymous在簡單的狀態機上非常容易使用,但它具有許多高級功能,使它可以在各種上下文中使用。

快速入門

跟隨官網提供的快速入門demo,定義了一個關系狀態機,關系狀態有兩種:Friend(朋友-友好)、Enemy(敵人-敵意),三個可以引發的事件:Hello(打招呼)、PissOff(走開)、Introduce(自我介紹)。打招呼->友好、走開->敵意、自我介紹->友好狀態。

創建一個控制臺應用程序,然后安裝Automatonymous

我們創建兩個類,一個類表示狀態(Relationship),另一個類定義狀態的行為(RelationshipStateMachine),代碼如下:

/// /// 狀態類/// public class Relationship{public State CurrentState { get; set; }public string Name { get; set; }}/// /// 狀態機/// public class RelationshipStateMachine :AutomatonymousStateMachine{public State Friend { get; private set; }public State Enemy { get; private set; }public Event Hello { get; private set; }public Event PissOff { get; private set; }public Event Introduce { get; private set; }public RelationshipStateMachine(){//定義當前 狀態屬性 InstanceState(x => x.CurrentState);//定義事件Event(() => Hello);Event(() => PissOff);Event(() => Introduce);// 定義狀態State(() => Friend);State(() => Enemy);Initially(When(Hello).Then(p => Console.WriteLine("StateMachine: Hello")).TransitionTo(Friend),When(PissOff).Then(ctx => Console.WriteLine(ctx.Instance.CurrentState.Name)).TransitionTo(Enemy),When(Introduce).Then(p =>{p.Instance.Name = p.Data.Name;Console.WriteLine($"你好:{p.Instance.Name},這是狀態機簡單入門篇");}).TransitionTo(Friend).Finalize());}}/// /// 事件數據/// public class Person{public string Name { get; set; }}

小結:在Automatonymous中 ,狀態是使用類進行管理的,如上面的Relationship。狀態機行為類定義需要繼承行為類需要繼續AutomatonymousStateMachine類,它是泛型類,需指定與行為關聯的狀態類型如AutomatonymousStateMachine。默認情況下,事件或狀態的所有公共屬性都將在基類的構造函數中自動定義和初始化。在構造函數中使用lambda方法Event和state方法明確地定義事件和狀態。

客戶端引發事件

支持事件無數據和有數據兩種方式,代碼如下:

static void Main(string[] args){var relationship = new Relationship();var machine = new RelationshipStateMachine();//machine.RaiseEvent(relationship, machine.Hello); 無數據var person = new Person { Name = "知音" };machine.RaiseEvent(relationship, machine.Introduce, person);//指定事件需要的數據}

輸出

?

總結

以上是生活随笔為你收集整理的.NET 状态机Automatonymous快速入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。