网站微信登录怎么做,自己建站的网站,带论坛的网站模板下载地址,网上注册公司流程和方法ExpandoObject的使用非常简单#xff0c;很容易入手。上一篇里面已经有详细的介绍了#xff0c;可以看这里(理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用)
下面对ExpandoObject的使用场合和一些认为需要注意的地方#xff0c;谈一下自己的看法:
一…ExpandoObject的使用非常简单很容易入手。上一篇里面已经有详细的介绍了可以看这里(理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用)
下面对ExpandoObject的使用场合和一些认为需要注意的地方谈一下自己的看法:
一ExpandoObject使用场合
在传递对象但是又不想创建一个class或者struct的时候ExpandoObject就是一个非常好的选择。假如我们有一个SendMail的函数功能是发送一个通知邮件给客户邮件的文本模板如下:Dear [Name],We have sent the gift to your address: [Address]
在具体发送邮件的时候 [Name]和[Address]的内容是从函数GetMailParameters()动态读取出来的。那么函数GetMailParameters的返回值如何定义好呢?
如果为GetMailParameters()函数创建一个struct或者class来传递, 有些小题大做了而且定义的struct和class重用性会非常低。
如果使用了ExpandoObject, 就非常容易的解决了这个问题。
public dynamic GetMailParameters()
{ var mailParameters new ExpandoObject(); mailParameters.Name”Peter”; mailParameters.Address”Shanghai China” return mail;
}
就算以后邮件模板改变添加了新的变量也只是简单的在ExpandoObject上扩展一个属性就可以了。
二, 注意问题
由于ExpandObject的先天不足(无特征性):
1. 没有区分的类型名称2. 没有确切类型定义
如果你看到一个string的函数返回值, 你会想到什么, 你会知道它是一个字符串(这不是废话吗?) 有Length等属性有IndexOf等方法。当返回值是MailHelper类对象时你想只需要直接F12就能看到源码里面有关于这个类的详细定义接着你就知道如何使用这个对象了。当你从一个函数中得到一个ExpandObject的dynamic的返回值时你知道是什么吗? ExpandObject就是一个黑箱里面装着什么谁都不知道。所以
1. ExpandObject不能用于太复杂的对象。
ExpandObject最好还是作为简单的数据容器不要弄得过于复杂甚至包含有函数处理。
2.ExpandObject的使用范围必须要短
范围短的意思是产生和使用ExpandObject的代码的路径必须要短(主要是函数调用路径)。如果你正在使用一个ExpandObject对象查看产生这个ExpandObject的地方发现分散在好几个函数之中还有嵌套的话那么这个ExpandObject是非常难于维护的。
3. ExpandObject的使用场合最好贴近程序的终端。
比如在MVC中的ViewBag, 就是一个好的例子。ViawBag用于生成页面, 而页面就是MVC程序的终端了。到了终端ExpandObject也就不能祸害它人了。正是由于ExpandObject的无特征性什么都可以做所以容易导致滥用。
下篇介绍如何通过继承DynamicObject和实现IDynamicMetaObjectProvider为动态类型添加特征性。
原文地址http://www.cnblogs.com/JustRun1983/p/3209573.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注