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# 4 dynamic(2) – ExpandoObject的使用C#Object
- C# ExpandoObject用法C#Object
- C# ExpandoObject的使用C#Object
- C# 4.0 新物件ExpandoObjectC#物件Object
- C# dynamicC#
- C#比較dynamic和Dictionary效能C#
- c# ExpandoObject動態擴充套件物件C#Object套件物件
- C#DynamicObject和ExpandoObject用法C#Object
- C# json to dynamic objectC#JSONObject
- C#中dynamic的正確用法C#
- 【轉】C#中dynamic的正確用法C#
- C# return dynamic/anonymous type value as function resultC#Function
- C#中關於 object,dynamic 一點使用心得C#Object
- C#-----ExpandoObject動態屬性C#Object
- 挖一挖C#中那些我們不常用的東西之系列(4)——GetHashCode,ExpandoObjectC#Object
- delphi open arrays和dynamic arrays區別
- ES 筆記十四:Index Template 和 Dynamic Template筆記Index
- 【c#表示式樹】最完善的表示式樹Expression.Dynamic的玩法C#Express
- Swift3、4中的@objc、@objcMembers和dynamicSwiftOBJ
- php static dynamicPHP
- dynamic_castAST
- 深入理解 c# 第十四章 一個通過 ExpandoObject實現簡單XML DOM 變換 建立DOM樹C#ObjectXML
- dynamic bone unity githubUnityGithub
- why use dynamic SQL?SQL
- Disable Dynamic DNS updateDNS
- @synthesize @dynamic 的區別
- DRM - Dynamic Resource MasteringAST
- hive dynamic partition的使用Hive
- EXECUTE IMMEDIATE dynamic sql in procedureSQL
- DataTable 轉為 List<dynamic>
- OpenMP For Construct dynamic 排程方式實現原理和原始碼分析Struct原始碼
- C# 和 API (轉)C#API
- Objective-C中的@dynamicObject
- Building a Dynamic Oracle ETL ProcedureUIOracle
- 啟動/關閉 dynamic viewView
- Maintain profile parameter dynamic with function.AIFunction
- C#屬性和lamdaC#
- c#之delegate和eventC#