c# dynamic和ExpandoObject
這兩個經常是組合出現的,dynamic類似於object,區別在於編譯階段不檢查,參考下圖:
這個圖很一目瞭然了,使用object是編譯不通過的。這就決定了它的使用場景是小眾的,不可以大面積使用,不然維護起來太麻煩了。比如你有一個List<Object>集合,裡面放了兩個類A和B,它們都有一個方法叫GetName(),那麼你就可以不用強制轉換了,直接使用,如下圖,上面的是傳統做法,下面的是使用dynamic的做法:
這裡面我還用到了c#7.0的一個新特性,叫模式匹配,有興趣可以自己研究下官方文件
下面我說下ExpandoObject。這個就相當於一個動態類,它有什麼屬性,可以在程式碼裡面隨意擴充套件,而且它還實現了INotifyPropertyChanged,也就是如果你給它設定了一個屬性Name,當你在以後的操作中變更了Name的值之後,它會通知前端。具體可以看下官方文件https://docs.microsoft.com/en-us/dotnet/api/System.Dynamic.ExpandoObject?view=netframework-4.7.2
如下圖:
這裡我提一個它的應用場景:datagrid表格類控制元件行列置換。有個學生表,裡面包含兩個欄位,一個是學生姓名,一個是學生考試分數。如果正常的放到前端顯示,也就是垂直顯示,應該是如下圖:
現在我要求顯示成這樣:
由於人數是不固定的,所以列應該是動態生成的,同時,當某個學生的分數被更新了,應該通知前端,橫向顯示,也就是每多一個學生,便多了一個屬性,然後給datagrid建立一個列,並且把這列繫結到這個屬性。具體的做法就不寫了,有興趣的可以深究下。
相關文章
- C# ExpandoObject的使用C#Object
- c# ExpandoObject動態擴充套件物件C#Object套件物件
- C#中dynamic的正確用法C#
- C#中關於 object,dynamic 一點使用心得C#Object
- C#-----ExpandoObject動態屬性C#Object
- ES 筆記十四:Index Template 和 Dynamic Template筆記Index
- 【c#表示式樹】最完善的表示式樹Expression.Dynamic的玩法C#Express
- 深入理解 c# 第十四章 一個通過 ExpandoObject實現簡單XML DOM 變換 建立DOM樹C#ObjectXML
- Swift3、4中的@objc、@objcMembers和dynamicSwiftOBJ
- @property @synthesize @dynamic
- dynamic_castAST
- php static dynamicPHP
- DRM - Dynamic Resource MasteringAST
- dynamic bone unity githubUnityGithub
- dynamic關鍵字
- ZOJ - 2112 Dynamic Rankings
- OpenMP For Construct dynamic 排程方式實現原理和原始碼分析Struct原始碼
- tf.nn.dynamic_rnnRNN
- DataTable 轉為 List<dynamic>
- P2617 Dynamic Rankings
- @synthesize @dynamic 的區別
- C#屬性和lamdaC#
- C# string、stringBuffer和stringBuilderC#UI
- c# 委託和事件C#事件
- 【C#開發】C#的協變和逆變C#
- DRM --- RAC object remastering ( Dynamic remastering )ObjectREMAST
- 動態規劃(Dynamic programming)動態規劃
- Basic Steps to Create Dynamic Modification Rule
- Y 分鐘速成 Dynamic Programming
- [C#]C#中ToString()和Convert.ToString()的區別C#
- static_cast和dynamic_cast的區別,看完這篇你就懂了!AST
- C# Dispose 和 Finalize 要點C#
- C#中?和??及?:的用法C#
- c# is 和 as 淺看重製版C#
- c#重寫和多型C#多型
- 深度解析@angular/platform-browser-dynamicAngularPlatform
- [20180808]Null value to Dynamic SQL.txtNullSQL
- Dynamic Web Project option missing in Eclipse KeplerWebProjectEclipse