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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

如何通过 C# 实现对象的变更跟踪 ?

發布時間:2023/12/4 C# 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何通过 C# 实现对象的变更跟踪 ? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

咨詢區

  • user137348

我有一個類包含五個屬性,如果任何一個屬性被改變,我希望這個類中的另一個屬性(IsDirty)會被自動變更,比如下面的類。

public?class?Class1 {bool?IsDIrty?{get;set;}string?Prop1?{get;set;}string?Prop2?{get;set;}string?Prop3?{get;set;}string?Prop4?{get;set;}string?Prop5?{get;set;} }

回答區

  • Shimmy Weitzhandler

在 .NET Standard 2.0 中已經提供了 IChangeTracking 和 IRevertibleChangeTracking 接口可以幫助你實現對象的變更跟蹤,接口實現如下:

  • IChangeTracking

  • class?Entity?:?IChangeTracking {string?_FirstName;public?string?FirstName{get?=>?_FirstName;set{if?(_FirstName?!=?value){_FirstName?=?value;IsChanged?=?true;}}}string?_LastName;public?string?LastName{get?=>?_LastName;set{if?(_LastName?!=?value){_LastName?=?value;IsChanged?=?true;}}}public?bool?IsChanged?{?get;?private?set;?}????public?void?AcceptChanges()?=>?IsChanged?=?false; }
  • IRevertibleChangeTracking

  • class?Entity?:?IRevertibleChangeTracking {Dictionary<string,?object>?_Values?=?new?Dictionary<string,?object>();string?_FirstName;public?string?FirstName{get?=>?_FirstName;set{if?(_FirstName?!=?value){if?(!_Values.ContainsKey(nameof(FirstName)))_Values[nameof(FirstName)]?=?_FirstName;_FirstName?=?value;IsChanged?=?true;}}}string?_LastName;public?string?LastName{get?=>?_LastName;set{if?(_LastName?!=?value){if?(!_Values.ContainsKey(nameof(LastName)))_Values[nameof(LastName)]?=?_LastName;_LastName?=?value;IsChanged?=?true;}}}public?bool?IsChanged?{?get;?private?set;?}public?void?RejectChanges(){foreach?(var?property?in?_Values)GetType().GetRuntimeProperty(property.Key).SetValue(this,?property.Value);AcceptChanges();}public?void?AcceptChanges(){_Values.Clear();IsChanged?=?false;} }

    可以看到,上面這種方式是可以實現的,但需要人工一行一行的鍵入,如何字段特別多的話,工作量還是非常大的,作為另一個選擇,我建議你使用 TrackerDog 這樣的開源工具包,它可以幫你一鍵生成模板,你只需要提供 POCO 類即可。

    點評區

    這種類屬性的變更通知,我記得 WPF 中就提供了 INotifyPropertyChanged 接口來實現這種 MVVM 的雙向綁定,確實這也是一個非常實用的特性,學習了。

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的如何通过 C# 实现对象的变更跟踪 ?的全部內容,希望文章能夠幫你解決所遇到的問題。

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