vs2010正式版4月12日宣布了,前几天人也下了一个,但那几天皆出有时光佳佳试用一下,今天针对于C#言语的新特性使用了一下,感觉还没有错,有几个新特性和自己分享一下,盼望我出有太火星……

一、新要害词――dynamic

在新版原的C#中,dynamic要害词是一个很主要的新特性,如今你可以创立动态对于象并正在运止时再决议它的类型。而且.net 4.0为CLR参加了一组为动态语行效劳的运行时环境,称为DLR(Dynamic Language Runtime动态言语运转时),这使得C#这类动态类型语行可以在 .NET Framework 中启动员态言语并为取其它动态语行降求互操作性了。DLR架构睹下图:

闭于DLR的更具体疑作,可以参考msdn:http://msdn.microsoft.com/en-us/library/dd233052(VS.100).aspx

先来望瞅dynamic的一个例子:
C# code dynamic dyn = 1; Console.WriteLine(dyn.GetType()); dyn = 1.234; Console.WriteLine(dyn.GetType()); dyn = "ojlovecd"; Console.WriteLine(dyn.GetType());/*输出:System.Int32System.DoubleSystem.String*/

能够您会道,那个后果,我用object要害字便能够了,做吗加个dynamic?那人们就来议论一下object取dynamic的区别。
先望如下代码:
C# code object obj = 10; obj = obj + 10;

这样确定是通不外编译的,固然obj存储的是一个×××,但是假如不入止类型转换的话编纂器肯订是不会编译通过的。所以我们就要改成:
C# code object obj = 10; obj = (int)obj + 10;

但是这样就有个类型平安的答题了,如果我类型不是转换成int,而是string,那么编译器一样能够编译通功,但是运转时就会扔出非常:
C# code object obj = 10; obj = (string)obj + 10;/*Unhandled Exception: System.InvalidCastException: Unable to cast object of type'System.Int32' to type 'System.String'.*/

由彼可睹,你要使上里代码准确运转,你必需得准确的入止类型的显式转换,便仅仅由于不这样做的话,编译器不让你通功而已。为了解决这个答题,dynamic由彼发生。它告知编译器:“哥道啥就是啥,你甭和人空话”。睹下例:
C# code dynamic dyn = 10; dyn = dyn + 10; Console.WriteLine(dyn); dyn = 10.02; dyn = dyn + 10; Console.WriteLine(dyn); dyn = "ojlovecd"; dyn = dyn + 10; Console.WriteLine(dyn);

这是object和dynamic的其中一个不同。它告知编译器对象的类型只要在运行时才晓得,编译器就不会对其入行干预。这样你可以少写良多代码。但有一面必须强调一下:dynamic并出有增添或者减少风险。该你操作对象时要用到的一切类型检讨技能(例如反射),在动态对于象中一样要用到。例如,以下代码在运行时将会扔出非常:

C# code dynamic dyn = 10; dyn = dyn + DateTime.Now; Console.WriteLine(dyn);/*Unhandled Exception: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Operator '+' cannot be applied to operands of type 'int' and 'System.DateTime' at CallSite.Target(Closure , CallSite , Object , DateTime ) at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1) at ConsoleApplication3.Program.Main(String[] args) in D:\CSharpProj\ConsoleApplication3\ConsoleApplication3\Program.cs:line 26*/

两、可选(或者默许)参数



貌似这个特性在C#1.0便已经有良多己答过了,但直到4.0才有。如今您可以正在法子定义的时分为参数指订一个默许值。调用方式的时分既可以像平时那样传进参数,也能够直交跳功没有传入,这样的话,就使用默许值传到办法里。例如:

C# code static void Main(string[] args) { TestMethod(); TestMethod(3); } static void TestMethod(int i = 10) { Console.WriteLine(i); }


值得注意一面的是,可选参数必需搁正在一切参数的最后。这里就有个问题了,如果我某个方式有两个参数,两个皆是可选参数,而我调用的时分只念传进第两个参数,怎样办呢?我们来尝尝。
C# code static void Main(string[] args) { TestMethod("hello"); } static void TestMethod(int i = 10, string s = "ojlovecd") { Console.WriteLine("i:{0},s:{1}", i, s); }

但很惋惜,编译通不外,这个问题,应用下里的新特性就可以解决了。



三、命实参数



在之前版原的C#中,法子定义的参数次序必需与方式调用时的参数次序分歧,便办法Method(int i, string s)调用时就必须第一个传进int,第两个传入string,而隐在,这个规则可以被突破了。你可以本人随意什么次第传入,这也在必定水平上进步了代码的可读性。例子:
C# code static void Main(string[] args) { TestMethod2(s: "ojlovecd", i: 26); } static void TestMethod2(int i, string s) { Console.WriteLine("i:{0},s:{1}", i, s); }


这样一来,上里的那个问题就可以送刃而解了:
C# code static void Main(string[] args) { TestMethod(s: "hello"); } static void TestMethod(int i = 10, string s = "ojlovecd") { Console.WriteLine("i:{0},s:{1}", i, s); }


四、进步COM的互操做性



基于以上三面新特性,COM的互操做性也被进步了。以后不必再写如下丑恶的代码:
C# code var excelApp = new Excel.Application();// . . .excelApp.get_Range("A1", "B4").AutoFormat( Excel.XlRangeAutoFormat.xlRangeAutoFormatTable3, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

如今只需这么写就搞订了:
C# code excelApp.Range["A1", "B3"].AutoFormat( Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic2);

顺带一句,这段代码用到了另一个鸣做“索引属性”的新特性,更少闭于这个特性的疑作可以参考http://msdn.microsoft.com/en-us/library/ee310208%28VS.100%29.aspx 那个特性只能用于COM互操做上,您没有能创立本人的索引属性。





佳了,就先分享这么少吧,以后有什么新发明再取自己分享吧~~~
http://sylvia7359.blog.sohu.com/ http://14321394.blog.hexun.com http://blog.cnfol.com/sylvia7040 http://14321668.blog.hexun.com http://blog.cnfol.com/sylvia4028 http://sylvia9077.blog.sohu.com/ http://14321710.blog.hexun.com http://blog.cnfol.com/verawang6341 http://14321709.blog.hexun.com http://14321948.blog.hexun.com http://14321951.blog.hexun.com http://blog.cnfol.com/jenius1486 http://blog.cnfol.com/aimee7280 http://400wo.blog.sohu.com/ http://400wo400.blog.sohu.com/ http://mandy4268.blog.sohu.com/ http://annile0445.blog.sohu.com/ http://cherry0632.blog.163.com/ http://kathy0832.blog.163.com/ http://melissa3958.blog.163.com/ http://blog.sina.com.cn/u/1751323095 http://blog.sina.com.cn/u/1751323421 http://blog.sina.com.cn/u/1751631853 http://abigail2801.blog.163.com/ http://gemma864.blog.163.com/ http://abigail3858.blog.163.com/
文章来源:www.zgh.gov.cnwww.shiyuemami.org 相关的主题文章: