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

歡迎訪問 生活随笔!

生活随笔

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

C#

理解C# 4 dynamic(4) – 让人惊艳的Clay

發布時間:2023/12/4 C# 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理解C# 4 dynamic(4) – 让人惊艳的Clay 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一,多種方式初始化對象

1, 最簡單的對象構建和初始化

dynamic New = new ClayFactory();var person = New.Person(); person.FirstName = "Louis"; person.LastName = "Dejardin";

注意這里的Person并不是一個具體的,實際存在的類或者結構體。我們在不需要定義Person類的情況下,就構建了一個具有FirstName和LastName屬性的對象。

2, 使用索引器的方式初始化

var person = New.Person(); person["FirstName"] = "Louis"; person["LastName"] = "Dejardin";

3, 使用匿名對象的方式實現初始化

var person = New.Person(new {FirstName = "Louis",LastName = "Dejardin"});

4,使用命名參數方式實現初始化

var person = New.Person(FirstName: "Louis",LastName: "Dejardin");

5,鏈式方式初始化

var person = New.Person().FirstName("Louis").LastName("Dejardin");

讀取屬性方式

person.FirstName person[“FirstName”] person.FirstName()

上面三種都是訪問FirstName屬性,它們都是等價的。
多種多樣的初始化對象和讀取屬性的方式,讓dynamic變得更加靈活. 這些都是ExpandoObject所做不到的。

二,構建神奇的Array

我們可以創建 JavaScript 風格的 Array:

dynamic New = new ClayFactory(); var people = New.Array(New.Person().FirstName("Louis").LastName("Dejardin"),New.Person().FirstName("Bertrand").LastName("Le Roy"));

1. 構建的Array, 具有Count屬性

Console.WriteLine("Count = {0}", people.Count);

2. 可以通過索引訪問

Console.WriteLine("people[0].FirstName = {0}", people[0].FirstName);

3. 支持foreach遍歷

foreach (var person in people) {Console.WriteLine("{0} {1}", person.FirstName, person.LastName); }

4. 簡單方便地為對象添加Array屬性

person.Aliases("bleroy", "BoudinFatal");

這里是為person這個動態對象添加了一個Array屬性,屬性的名字叫Aliases, 所以這里Aliases可以替換成任何名稱,并沒有特定含義。
下面的代碼和上面的作用是等價的:

persons.Aliases1(new[] {"bleroy", "BoudinFatal"});

5. Array中的元素類型是dynamic,而不是普通類型

因為Array元素的類型是dynamic, 所以可以有這樣的Array:

var people = New.Array(New.Person().FirstName("Louis").LastName("Dejardin"), "Peter");

三, 為對象動態添加方法

和ExpandoObject一樣,你也可以為其擴展方法,只是方法調用的時候,需要多添加一個().
這可能是Clay支持用()來訪問對象屬性導致的。

var person = New.Pserson();

? ? ? ? ? person.FirstName = "Louis";

? ? ? ? ? person.LastName = "Dejardin";

? ? ? ? ? person.SayFullName = new Func<string, string>(x => person.FirstName + person.LastName + x);


? ? ? ? ? Console.WriteLine(person.SayFullName()(" Here!"));

四,動態的實現接口

假設我們定義了這個接口,用動態類型創建一個對象,而且這個對象是實現了該接口,這看起來是不是不可完成的任務? Clay能辦到!

public interface IPerson

{?

? ? ? ?string FirstName { get; set; }?

? ? ? ?string LastName { get; set; }

}


dynamic New = new ClayFactory();

var people = New.Array(

New.Person().FirstName("Louis").LastName("Dejardin"),

New.Person().FirstName("Bertrand").LastName("Le Roy"));

IPerson lou = people[0];

var fullName = lou.FirstName + " " + lou.LastName;

五,Clay的應用背景

Clay產生于Orchard CMS項目,Orchard CMS是基于Asp.net MVC的開源CMS。對于CMS頁面呈現所要使用的ViewModel來說,是無法預測和事先定義的,沒有任何規則可言,因為你沒有辦法知道,我用到的頁面會增加什么數據的顯示。Orchard中想通過一種構建一個可以自由擴展的,靈活的dynamic對象來一勞永逸的解決這個問題,這就是Clay的初衷。

Clay是一個獨立的開源項目,它無所不能的能力,一定能夠幫助你簡化很多類定義和反射代碼。

六,Clay的Sample

Clay的示例代碼可以通過nuget很方便的取到,給位可以自己建個Console程序,下載下來看看。

相關文章:

  • 理解C# 4 dynamic(1) - var, object, dynamic的區別以及dynamic的使用

  • 理解C# 4 dynamic(2) – ExpandoObject的使用

  • 理解C# 4 dynamic(3) – DynamicObject的使用

原文地址:http://www.cnblogs.com/JustRun1983/p/3529157.html


.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注

總結

以上是生活随笔為你收集整理的理解C# 4 dynamic(4) – 让人惊艳的Clay的全部內容,希望文章能夠幫你解決所遇到的問題。

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