C# Dynamic Var Object 学习

原文学习url:http://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2125982.html

动态变量类型Dynamic学习比较Var和Object

Dynamic为动态变量类型,在编译的时候不校验在运行时才转化类型,Dynamic可以和其他类型进行隐式转化

eg:

dynamic d1 = 7;

dynamic d2 = "a string";

dynamic d3 = System.DateTime.Today;

dynamic d4 = System.Diagnostics.Process.GetProcesses();

int i = d1;

string str = d2;

DateTime dt = d3;

System.Diagnostics.Process[] procs = d4;


比较于var,var为在编译时就转化为其应有的数据类型

eg:

<span style="font-size:18px;">var i=7;
var j="test";
编译后:
int i=7;
string j="test";
</span>

Dynamic在编译的时候不会转化为其应有的数据类型,而是在运行时在转换,就此而言,Dynamic更接近与Object,但是用法却更接近于Var

重载函数

当一大堆重载函数参数列表的个数一样,调用重载函数的时候使用Dynamic,那真是画美不看,

eg:

//申明的重载函数

public void test(int i){};

public void test(float i){};

public void test(string i){};

//调用

Dynamic i=data;

test(i);//慢慢找

eg2:

//申明的函数

public void test(dynamic i){};

//调用

test(1);

test("test");


简化反射

减少代码行数,提高效率

引用原文中有例子,不在陈述= =

C#中,`dynamic` 关键字是一种类型,它指示编译器在编译时期忽略类型检查。使用 `dynamic` 类型的变量可以存储任何类型的对象,而这些对象的实际类型只有在运行时才能确定。这种方式特别适用于 COM 互操作、反射和动态语言交互等场景。 `dynamic` 类型的主要应用场景包括: 1. **简化 COM 互操作代码**:当你使用 COM 对象时,通常需要大量的类型换和显式的 `InvokeMember` 调用。但如果 COM 方法返回 `object` 类型,你可以将返回值指定为 `dynamic`,这样你就可以直接使用返回对象而不需要强制类型换或使用 `InvokeMember`。 2. **简化反射操作**:在使用反射时,通常需要通过 `System.Reflection.Emit` 或 `Activator.CreateInstance` 创建对象,并通过 `InvokeMember` 调用方法。使用 `dynamic` 可以在调用这些反射方法时不需要复杂的类型检查和换。 3. **与动态语言的交互**:C# 4.0 与动态语言运行时(DLR)一起工作时,可以利用 `dynamic` 类型。这使得 C# 程序能够更容易地与 IronPython、IronRuby 等动态语言编写的库进行交互。 4. **简化复杂的类型结构**:当处理复杂的类型层次结构或嵌套类型时,`dynamic` 可以简化代码的编写,使得代码更加清晰。 下面是一个简单的例子,展示了如何在 C# 中使用 `dynamic` 关键字: ```csharp dynamic x = "Hello"; dynamic y = 5; dynamic z = true; // 可以直接使用变量,不需要指定类型 Console.WriteLine(x); Console.WriteLine(y); Console.WriteLine(z); // 动态调用方法和属性 var dynamicObject = new ExpandoObject(); dynamicObject.Name = "Dynamic"; dynamicObject.PrintName = new Action(() => Console.WriteLine(((dynamic)dynamicObject).Name)); // 调用动态对象上的方法 dynamicObject.PrintName(); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值