c# dynamic 学习
来源:互联网 发布:安娜科穆宁 知乎 编辑:程序博客网 时间:2024/06/04 22:02
网上也有多资料是关于 C# dynamic的,这里自己总结下.
首先 和 var 关键字比较下,程序一旦被编译,编译期会自动匹配var 变量的实际类型.
var 有 四个特点:
1. 必须在定义时初始化。也就是必须是var s = “abcd”形式,而不能是如下形式:
var s;
s = “abcd”;
2. 一但初始化完成,就不能再给变量赋与初始化值类型不同的值了。
3. var要求是局部变量。
4. 使用var定义变量和object不同,它在效率上和使用强类型方式定义变量完全一样。
而dynamic被编译后,实际是一个object类型,只不过编译器会对dynamic类型进行特殊处理,让它在编译期间不进行任何的类型检查,而是将类型检查放到了运行期
dynamic d1 = 7;
dynamic d2 = "a string";
dynamic d3 = System.DateTime.Today;
int i = d1;
string str = d2;
DateTime dt = d3;
方法中含有dynamic类型参数的重载问题
如果调用一个方法是传递了dynamic类型的对象,或者被调用的对象是dynamic类型的,那么重载的判断是发生在运行时而不是编译时。
动态语言运行时(dynamic language runtime DLR)
动态语言运行时是.NET Framework 4 Beta 1中的一组新的API,它提供了对c#中dynamic类型的支持,也实现了像IronPython和IronRuby之类的动态程序设计语言。
dynamic可以简化反射。
以前我们这样使用反射:
public class DynamicSample
{
public string Name { get; set; }
public int Add(int a, int b)
{
return a + b;
}
}
DynamicSample dynamicSample = new DynamicSample(); //create instance为了简化演示,我没有使用反射
var addMethod = typeof(DynamicSample).GetMethod("Add");
int re = (int)addMethod.Invoke(dynamicSample, new object[] { 1, 2 });
现在,我们有了简化的写法:
dynamic dynamicSample2=new DynamicSample();int re2= dynamicSample2.Add(1,2);
参考链接:http://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2125982.html
有点 类似QT中 qvariant, 但是还是有区别,各有各的特点.
首先 和 var 关键字比较下,程序一旦被编译,编译期会自动匹配var 变量的实际类型.
var 有 四个特点:
1. 必须在定义时初始化。也就是必须是var s = “abcd”形式,而不能是如下形式:
var s;
s = “abcd”;
2. 一但初始化完成,就不能再给变量赋与初始化值类型不同的值了。
3. var要求是局部变量。
4. 使用var定义变量和object不同,它在效率上和使用强类型方式定义变量完全一样。
而dynamic被编译后,实际是一个object类型,只不过编译器会对dynamic类型进行特殊处理,让它在编译期间不进行任何的类型检查,而是将类型检查放到了运行期
dynamic d1 = 7;
dynamic d2 = "a string";
dynamic d3 = System.DateTime.Today;
int i = d1;
string str = d2;
DateTime dt = d3;
方法中含有dynamic类型参数的重载问题
如果调用一个方法是传递了dynamic类型的对象,或者被调用的对象是dynamic类型的,那么重载的判断是发生在运行时而不是编译时。
动态语言运行时(dynamic language runtime DLR)
动态语言运行时是.NET Framework 4 Beta 1中的一组新的API,它提供了对c#中dynamic类型的支持,也实现了像IronPython和IronRuby之类的动态程序设计语言。
dynamic可以简化反射。
以前我们这样使用反射:
public class DynamicSample
{
public string Name { get; set; }
public int Add(int a, int b)
{
return a + b;
}
}
DynamicSample dynamicSample = new DynamicSample(); //create instance为了简化演示,我没有使用反射
var addMethod = typeof(DynamicSample).GetMethod("Add");
int re = (int)addMethod.Invoke(dynamicSample, new object[] { 1, 2 });
现在,我们有了简化的写法:
dynamic dynamicSample2=new DynamicSample();int re2= dynamicSample2.Add(1,2);
参考链接:http://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2125982.html
有点 类似QT中 qvariant, 但是还是有区别,各有各的特点.
- c# dynamic 学习
- C# Dynamic 关键字学习
- C# Dynamic Var Object 学习
- C# dynamic
- C#中的dynamic
- dynamic (C# Reference)
- C# 反射和dynamic
- C#中的dynamic类型
- C# dynamic的使用
- C# dynamic常用整理
- C#学习笔记(三)—–C#高级特性:dynamic
- C++学习代码--dynamic
- Dynamic proxies学习笔记。
- dynamic programming 学习
- [C# 4.0] 1. Dynamic (1)
- [C# 4.0] 2. Dynamic (2)
- C#4.0初探:dynamic 关键字
- 理解C# 4 dynamic(1)
- warning: extra tokens at end of #include directive
- C++中的头文件和源文件
- 我们应当怎样做需求分析
- Highcharts Demo Gallery 动态图
- javadoc的使用以及打印命令行参数的程序
- c# dynamic 学习
- LAMP 系统性能调优,第 3 部分: MySQL 服务器调优
- fedora11下配置NFS服务
- dede调用非同一个数据库的DZ论坛的帖子
- 程序员的职场禁忌
- opencv中直方图结构
- 一个简单的模板类(PHP)
- Eclipse Access Restriction
- jquery Ajax 跨域调用(jsonp)