C#dynamic关键字(1)
一.object,var,dynamic的区别
static void Main()
{
//var是C# 3中引入的,其实它仅仅只是一个语法糖. var本身并不是一种类型, 其它两者object和dynamic是类型。
//var声明的变量在赋值的那一刻,就已经决定了它是什么类型。
//object之所以能够被赋值为任意类型的原因,其实都知道,因为所有的类型都派生自object. 所以它可以赋值为任何类型:
//dynamic它的特点是申明为dynamic类型的变量,不是在编译时候确定实际类型的, 而是在运行时。
var a = ;
object b = ;
dynamic c = "";
//报错,类型已确认为int
//a = new string[] { "1" };
b = new string[] { "" };
//代码是能够通过编译的,但是会在运行时报错:
c++;
}
二.dynamic的用法
static void Main()
{
//1 直接使用该类型,可以非常方便的插入属性, 方法
dynamic person = new System.Dynamic.ExpandoObject();
person.Name = "cary";
person.Age = ;
person.ShowDescription = new Func<string>(() => person.Name + person.Age);
Console.WriteLine(person.Name + person.Age + person.ShowDescription());
Console.ReadLine();
}
static void Main()
{
//2 枚举所有成员
dynamic person = new System.Dynamic.ExpandoObject();
person.Name = "cary";
person.Age = ;
person.ShowDescription = new Func<string>(() => person.Name + person.Age);
foreach (var property in (IDictionary<String, Object>)person)
{
Console.WriteLine(property.Key + ": " + property.Value);
}
Console.ReadLine();
}
class Program
{
static void Main()
{
//3 简化反射
//常用的处理反射的例子:
GetCalculator _getcalculator = new GetCalculator();
object calc = _getcalculator;
Type calcType = calc.GetType();
object res = calcType.InvokeMember("Add", BindingFlags.InvokeMethod, null, _getcalculator, new object[] { , });
int sum = Convert.ToInt32(res);
//使用dynamic之后:
dynamic calc1 = _getcalculator;
int sum1 = calc1.Add(, ); Console.WriteLine("sum的值为{0},sum1的值为{1}", sum, sum1);
Console.ReadLine();
}
} class GetCalculator
{
public int Add(int a, int b)
{
return a + b;
}
}
三.使用dynamic的注意事项
有了dynamic,.net就以及有了动态类型的优势,但是由于对于dynamic类型的所有操作,都是在运行时确定的,所有错误无法在编译时候出现,使用的时候,就需要非常小心。
因为dynamic是类型,所以如果函数接受的是确定类型的参数,是不能传入dynamic类型的,这样会有编译错误。比如:
public int Add(int a, int b){
return a + b;
}
dynamic test1 = ;
dynamic test2 = ;
Add(test1, test2);
C#dynamic关键字(1)的更多相关文章
- C#中Dynamic关键字
dynamic关键字和动态语言运行时(DLR)是.Net 4.0中新增的功能. 什么是"动态"? 编程语言有时可以划分为静态类型化语言和动态类型化语言.C#和Java经常被认为是静 ...
- 浅谈Dynamic 关键字系列之一:dynamic 就是Object(转)
C# 4.0提供了一个dynamic 关键字,那么什么是dynamic,究竟dynamic是如何工作的呢? 从最简单的示例开始: static void Main(string[] args) { d ...
- dynamic关键字
public class TestClass { public dynamic Values { get; set; } } public class Test { static void Func( ...
- C# 动态语言特性,dynamic 关键字研究
1 动态语言简介 支持动态特性的语言现在大行其道,并且有继续增长的趋势.比如 Ruby 和 Python, 还有天王级的巨星 --- JavaScript. 现在一个程序员说自己对 Jav ...
- C#中 dynamic 关键字
所有表达式都能隐式的转换成dynamic,因为所有的表达式最终都能生成从Object派生出的类型. ; int b = a; //隐式转换错误 int b2 = (int)a; ; int b3 ...
- C#4.0中的dynamic关键字和ExpandoObject对象
dynamic最大的特点我想莫过于在它的类型在运行时才确定,这也是它与往静态类型关键字的最大区别.如果你在你的代码操作中用到了dynamic关键字去定义一个变量时,那么这个变量在编译的时候编译器不会对 ...
- Swift dynamic关键字
使用dynamic关键字标记属性,使属性启用Objc的动态转发功能: dynamic只用于类,不能用于结构体和枚举,因为它们没有继承机制,而Objc的动态转发就是根据继承关系来实现转发. 参考资料: ...
- dynamic关键字的使用
https://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_JsonConvert.htm 在使用DeserializeObject函数进行 ...
- Dart编程实例 - Dynamic 关键字
Dart编程实例 - Dynamic 关键字 void main() { dynamic x = "tom"; print(x); } 本文转自:http://codingdict ...
随机推荐
- [codevs1157]2^k进制数
[codevs1157]2k进制数 试题描述 设r是个2k 进制数,并满足以下条件: (1)r至少是个2位的2k 进制数. (2)作为2k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. ...
- gulp学习笔记1-定义
1.gulp是前端开发过程中对代码进行构建的自动化工具,可以通过它提供的各种插件实现如:预编译(sass&less).压缩.合并.图片精灵等前端的重复操作 2.基于nodeJS,以js编写插件 ...
- 微型Http服务器Tiny Http Server
Tiny Http Server 一个简单的跨平台Http服务器.服务器部分使用了Mongoose的代码,界面是使用QT开发的. 开发为了在临时需要使用一个http服务器来做发布代码文档的时候,不用去 ...
- git 忽略文件权限
git config --add core.filemode false 发现.git/config 中新增了一行: [core] ... filemode = false ref: http://b ...
- Nginx 使用 sever 段规则屏蔽恶意 User Agent
相对于 Apache,Nginx 占用的系统资源更少,更适合 VPS 使用.恶意的 User Agent 无处不在,博客更换到 WordPress 没几天,就被 SPAM(垃圾留言)盯上,又被暴力破解 ...
- 【GoLang】GoLang 错误处理 -- 使用 error is value 的思路处理,检查并处理error
吐血推荐: https://dave.cheney.net/2016/04/27/dont-just-check-errors-handle-them-gracefully 参考资料: https:/ ...
- HTTP 格式
HTTP请求报文和HTTP响应报文 HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的.HTTP有两类报文:请求报文和响应报文. HTTP请求报文 一个HTT ...
- JavaScript——Window对象
1.serTimeout()和setinterval()可用于注册在指定的时间之后单词或者重复调用的函数. 2.window对象的location属性引用的是Location对象,表示该窗口当前显示的 ...
- spinlock原理
[参考] http://www.searchtb.com/2011/06/spinlock%E5%89%96%E6%9E%90%E4%B8%8E%E6%94%B9%E8%BF%9B.html
- selenium webdriver学习(一)
package baidu; import java.io.File; import java.io.IOException; import junit.framework.TestCase; imp ...