Learn_Dynamic
首先看一下Dynamic的定义
Visual C# 2010 引入了一个新类型 dynamic。 该类型是一种静态类型,但类型为 dynamic 的对象会跳过静态类型检查。 大多数情况下,该对象就像具有类型 object 一样。 在编译时,将假定类型化为 dynamic 的元素支持任何操作。 因此,您不必考虑对象是从 COM API、从动态语言(例如 IronPython)、从 HTML 文档对象模型 (DOM)、从反射还是从程序中的其他位置获取自己的值。 但是,如果代码无效,则在运行时会捕获到错误。
先来看一个简单的应用
dynamic d1 = ;
dynamic d2 = "我是动态类型";
Console.WriteLine(d1+d2);

下面来看看Dynamic和反射的不同之处,如下:
我们可以看到Dynamic可以一定程度的简化反射调用的步骤,并且Dynamic会自动加载,也就是我们做的少,那么编译器就做的多.
但编译器会优化Dynamic类型,所以说Dynamic在一定程度上优于Dynamic
Person p = new Person();
Type t = p.GetType();
int i1 = (int)t.InvokeMember("Add", BindingFlags.InvokeMethod, null, p, new object[] { , });
Console.WriteLine("通过反射来调用Add方法:\n"+i1);
dynamic dy = new Person();
i1=dy.Add(, );
Console.WriteLine("通过Dynamic来调用Add方法:\n" + i1);
Console.Read();

通过Dynamic动态创建对象
class MyDynamic : DynamicObject
{
private Dictionary<string, object> _Dynamic = new Dictionary<string, object>(); public override bool TryGetMember(GetMemberBinder binder, out object result)
{
bool re = false;
if (_Dynamic.ContainsKey(binder.Name))
{
result = _Dynamic[binder.Name];
re = true;
}
else
result = "对不起属性不存在哦!!!";
return re;
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
_Dynamic[binder.Name] = value;
return true;
}
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
return base.TryInvokeMember(binder, args, out result);
}
}
static void Main(string[] args)
{
dynamic d = new MyDynamic();
d.name = "";
Func<int, int, int> dd = (d1, d2) => { return d1 + d2; };
d.add = dd;
Console.WriteLine(d.add(, ));
Console.WriteLine(d.name);
Console.Read();
}

Learn_Dynamic的更多相关文章
随机推荐
- 如何利用python使用libsvm
一:libsvm包下载与使用: LIBSVM是台湾大学林智仁(Lin Chih-Jen)副教授等开发设计的一个简单.易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供了编译好的可在 ...
- RabbitMQ消息队列(一): Detailed Introduction 详细介绍(转)
1. 历史 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有 ...
- Angularjs checkbox的ng属性
angularjs 默认给 input[checkbox] 元素定制了一些属性,如: <input type="checkbox" ng-mudel="name&q ...
- poj3686The Windy's (KM)
http://poj.org/problem?id=3686 拆点很巧妙 将每个M个点拆成m*n个点 分别表示第i个玩具在第j个机器上倒数第K个处理 假设这k个玩具真正用在加工的时间分为a1,a2,a ...
- JSOI2015 R3 退队滚粗了
JSTSC最终落下帷幕,最终还是没能翻盘成功——退队了,遗憾啊,中原得鹿不由人 day0 没啥好说的,我一开始把省常中和常州一中搞混了……,不过常州一中的伙食还是相当良心的,比省常中好 考前感觉状态不 ...
- 5个难以置信的VS 2015预览版新特性
Visual Studio 2015 Preview包含了很多强大的新特性,无论你是从事WEB应用程序开发,还是桌面应用程序开发,甚至是移动应用开发,VS 2015都将大大提高你的开发效率.有几个特性 ...
- python20151125
python exit() python test.py 输入输出 print('2\n2') print(1, 2, 3) name = input() print(':', name) 数据类型和 ...
- Erlang入门(三)——分布式编程
明天要回家一个星期了,好好休息下.今天找到别人翻译的Erlang编程手册,值的好好读一遍. 所谓分布式的Erlang应用是运行在一系列Erlang节点组成的网络之上.这样的系统的性质与单一节点上 ...
- Button 自定义(一)-shape
需求:自定义Button,使用系统自定义Shape: 效果图: 1.默认状态 2.选中状态 实现分析: 1.目录结构: 代码实现: 1.button_normal.xml <?xml versi ...
- Uva 796 Critical Links 找桥
这个题很简单,但是输入有毒,用字符串的我一直RE 然后换成这样瞬间AC #include <stdio.h> #include <string.h> #include < ...