打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

Clay非常类似于ExpandoObject, 可以看做是ExpandoObject的加强版. 它们能够让我们在不需要定义类的情况下,就构建出我们想要的对象。Clay和ExpandoObject相比,提供了更加灵活的语法支持,让我们像写javascript代码一样写C#代码,同时还能够用于构建多层级的复杂对象。

阅读目录:

一、多种方式初始化对象

二、构建神奇的Array

三、为对象动态添加方法

四、动态的实现接口

五、Clay的应用背景

六、Clay的Sample

一,多种方式初始化对象

1, 最简单的对象构建和初始化

注意这里的Person并不是一个具体的,实际存在的类或者结构体。我们在不需要定义Person类的情况下,就构建了一个具有FirstName和LastName属性的对象。

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

3, 使用匿名对象的方式实现初始化

4,使用命名参数方式实现初始化

5,链式方式初始化

读取属性方式

上面三种都是访问FirstName属性,它们都是等价的。
多种多样的初始化对象和读取属性的方式,让dynamic变得更加灵活. 这些都是ExpandoObject所做不到的。

二,构建神奇的Array

我们可以创建 JavaScript 风格的 Array:

1. 构建的Array, 具有Count属性

2. 可以通过索引访问

3. 支持foreach遍历

4. 简单方便地为对象添加Array属性

这里是为person这个动态对象添加了一个Array属性,属性的名字叫Aliases, 所以这里Aliases可以替换成任何名称,并没有特定含义。
下面的代码和上面的作用是等价的:

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

因为Array元素的类型是dynamic, 所以可以有这样的Array:

三, 为对象动态添加方法

和ExpandoObject一样,你也可以为其扩展方法,只是方法调用的时候,需要多添加一个().
这可能是Clay支持用()来访问对象属性导致的。

四,动态的实现接口

假设我们定义了这个接口,用动态类型创建一个对象,而且这个对象是实现了该接口,这看起来是不是不可完成的任务? Clay能办到!

五,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的使用

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
C#程序编写高质量代码改善的157个建议【13-15】[为类型输出格式化字符串、实现浅拷贝和深拷贝、用dynamic来优化反射]
JPA的Embeddable Objects - LalfaShi‘Blog
PropertyGrid Refresh problem...
脚本百事通
Windows8SQLite数据库操作[Sync]
C# IEnumerable和IEnumerator的区别,如何实现
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服