栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

C#4.0中的“动态”类型用于什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#4.0中的“动态”类型用于什么?

动态关键字是C#4.0的新增功能,用于告诉编译器变量的类型可以更改,或者直到运行时才知道。认为它可以与对象进行交互而无需强制转换。

dynamic cust = GetCustomer();cust.FirstName = "foo"; // works as expectedcust.Process(); // works as expectedcust.MissingMethod(); // No method found!

注意,我们不需要强制转换或声明cust为Customer类型。因为我们宣布它为动态,所以运行时将接管然后为我们搜索并设置FirstName属性。当然,现在,当您使用动态变量时,您将放弃编译器类型检查。这意味着调用cust.MissingMethod()将编译并且直到运行时才会失败。此操作的结果是RuntimeBinderException,因为没有在Customer类上定义MissingMethod。

上面的示例显示了调用方法和属性时动态的工作方式。另一个强大的(可能有危险的)功能是能够为不同类型的数据重用变量。我敢肯定,那里的Python,Ruby和Perl程序员可以想出一百万种方法来利用这一点,但是我一直在使用C#,以至于我觉得这是“错误的”。

dynamic foo = 123;foo = "bar";

好的,因此您很可能不会经常编写上述代码。但是,有时可能会派上用场的变量重用或清理肮脏的旧代码片段。我经常遇到的一种简单情况是,经常不得不在十进制和双精度之间进行转换。

decimal foo = GetDecimalValue();foo = foo / 2.5; // Does not compilefoo = Math.Sqrt(foo); // Does not compilestring bar = foo.ToString("c");

第二行不编译,因为2.5键入为双精度,而第3行不编译,因为Math.Sqrt需要双精度。显然,您所需要做的就是强制转换和/或更改变量类型,但是在某些情况下,可以使用动态变量。

dynamic foo = GetDecimalValue(); // still returns a decimalfoo = foo / 2.5; // The runtime takes care of this for usfoo = Math.Sqrt(foo); // Again, the DLR works its magicstring bar = foo.ToString("c");

阅读更多功能:http :
//www.preproject.com/KB/cs/CSharp4Features.aspx



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/395430.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号