志在指尖
用双手敲打未来

C#中dynamic应用Clay

一,多种办法初始化目标
1,最简略的目标构建和初始化
[C#]纯文本检查
dynamicNew=newClayFactory();
varperson=New.Person();
person.FirstName=”Louis”;
person.LastName=”Dejardin”;
留意这里的Person并不是一个具体的,实际存在的类或者结构体。咱们在不需求界说Person类的情况下,就构建了一个具有FirstName和LastName特点的目标。
2,运用索引器的办法初始化
[C#]纯文本检查
varperson=New.Person();
person[“FirstName”]=”Louis”;
person[“LastName”]=”Dejardin”;
3,运用匿名目标的办法完成初始化
[C#]纯文本检查
varperson=New.Person(new{FirstName=”Louis”,LastName=”Dejardin”});c#
4,运用命名参数办法完成初始化
[C#]纯文本检查
varperson=New.Person(FirstName:”Louis”,LastName:”Dejardin”);
5,链式办法初始化
[C#]纯文本检查
varperson=New.Person().FirstName(“Louis”).LastName(“Dejardin”)
读取特点办法
[C#]纯文本检查
person.FirstNameperson[“FirstName”]person.FirstName()
上面三种都是访问FirstName特点,它们都是等价的。
多种多样的初始化目标和读取特点的办法,让dynamic变得愈加灵敏.这些都是ExpandoObject所做不到的。
二,构建神奇的Array
咱们能够创建JavaScript风格的Array:
[C#]纯文本检查
dynamicNew=newClayFactory();
varpeople=New.Array(
New.Person().FirstName(“Louis”).LastName(“Dejardin”),
New.Person().FirstName(“Bertrand”).LastName(“LeRoy”)
)
1.构建的Array,具有Count特点
[C#]纯文本检查
Console.WriteLine(“Count={0}”,people.Count);
2.能够通过索引访问
[C#]纯文本检查仿制
Console.WriteLine(“people[0].FirstName={0}”,people[0].FirstName);
3.支持foreach遍历
[C#]纯文本检查
foreach(varpersoninpeople)
{
Console.WriteLine(“{0}{1}”,person.FirstName,person.LastName);
}
4.简略方便地为目标增加Array特点
[C#]纯文本检查
person.Aliases(“bleroy”,”BoudinFatal”);
这里是为person这个动态目标增加了一个Array特点,特点的名字叫Aliases,所以这里Aliases能够替换成任何称号,并没有特定意义。
下面的代码和上面的作用是等价的:
persons.Aliases1(new[]{“bleroy”,”BoudinFatal”});
5.Array中的元素类型是dynamic,而不是普通类型
因为Array元素的类型是dynamic,所以能够有这样的Array:
[C#]纯文本检查
varpeople=New.Array(New.Person().FirstName(“Louis”).LastName(“Dejardin”),”Peter”);
三,为目标动态增加办法
和ExpandoObject相同,你也能够为其扩展办法,仅仅办法调用的时候,需求多增加一个().
这可能是Clay支持用()来访问目标特点导致的。
[C#]纯文本检查
6
varperson=New.Pserson();
person.FirstName=”Louis”;
person.LastName=”Dejardin”;
person.SayFullName=newFunc(x=>person.FirstName+person.LastName+x);
Console.WriteLine(person.SayFullName()(“Here!”));
四,动态的完成接口
假定咱们界说了这个接口,用动态类型创建一个目标,并且这个目标是完成了该接口,这看起来是不是不可完成的使命?Clay能办到!
[C#]纯文本检查
publicinterfaceIPerson
{
stringFirstName{get;set;}
stringLastName{get;set;}
}
dynamicNew=newClayFactory();
varpeople=New.Array(
New.Person().FirstName(“Louis”).LastName(“Dejardin”),
New.Person().FirstName(“Bertrand”).LastName(“LeRoy”));
IPersonlou=people[0];
varfullName=lou.FirstName+””+lou.LastName;
五,Clay的使用布景
Clay产生于OrchardCMS项目,OrchardCMS是根据Asp.netMVC的开源CMS。对于CMS页面呈现所要运用的ViewModel来说,是无法预测和事先界说的,没有任何规则可言,因为你没有办法知道,我用到的页面会增加什么数据的显示。Orchard中想通过一种构建一个能够自由扩展的,灵敏的dynamic目标来一劳永逸的解决这个问题,这就是Clay的初衷。
Clay是一个独立的开源项目,它无所不能的才能,一定能够帮助你简化许多类界说和反射代码。

未经允许不得转载:IT技术网站 » C#中dynamic应用Clay
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载