zoukankan      html  css  js  c++  java
  • C#2.0 新特性概述

         前一段时间写Resume,写自己熟悉.Net 2.0。然后想到如果别人问C#2.0有些什么新特性,我应该怎么回答呢?发觉原来除了泛型(Generic)外自己也说不出什么。于是翻书查资料重新整理了思路。重新审视C#2.0的新特性,当作学习3.0的起步吧。

    一、泛型(Generic)
    概述:
    引入泛型绝对是C#2.0的最大的新特性。通过“参数化类型”实现一份代码操作多种数据类型。泛型的优点是更好的类型安全;更好的复用;更
    高的效率和更清晰的约束。但说实在,除了一些通用的数据结构,集合类和通用算法外,使用到泛型的地方还不多。而且System.Collections.Generic中的类也很够用了。基本没写过自己的泛型类。
    语法点:
    语法方面主要是使用在类型名称后面加入“<T>”来传入类型参数。涉及泛型类型继承的一条规则是“封闭类(所有类型都已确定)不能继承
    开放类(含有未确定类型)”。同时可以使用where来添加对作为参数的类型的约束。具体有四种:基类约束、接口约束、构造器约束和值/引用类型约束。最后特别提醒,delegate也是一种类型,别忘了泛型委托。

    二、泛型方法(Generic Method)
    概述:
    泛型方法即在方法声明中包含类型参数。其实属泛型的内容。但泛型方法可以用在一般类中。
    语法点:
    重载(overload)的时候注意,约束不成为方法签名的一部分。而重写(override),约束是会被默认继承的。

    三、匿名方法(Anonymous Method)
    概述:可以直接将代码赋给委托。在进行委托实例化时可以省略掉委托类型。代码示例如下:
    myButton.Click += delegate {//代码}
    myButton.Click += myClick;
    感觉就是一种语法的简化。从代码的可维护性来说还是不用为好。但又确实能使一些代码简洁一点。看团队的决定吧。
    语法点:
    要注意外部变量的生存周期会一直延长到委托实例引用结束。尽量避免使用。

    四、迭代器(Iterator)
    概述:
    严格来说只是简化迭代器的构造罢了。或者说简化了创建可以用于foreach的枚举集合的工作。通过引入关键字yield来实现。再不用太多的关心IEnumerator了。直接在类中实现GetEnumerator()然后在for循环中用yield return就可以了。
    语法点:
    可以用yield break来停止迭代。

    五、局部类(Partial Class)
    概述:
    就是允许通过关键字partial将一个类写在多个cs文件中。最大的用处可能就是将IDE自动生成的代码分开吧。大家都留意到VS05中的自动生成的代码都到designer.cs中去了吧。
    语法点:
    在不同部分定义中,Attribute和Interface是累加的。当然要保证基类的唯一。而abstract和sealed是部分使用,整个类生效。语义类型访问修饰符要保持一致。

    六、可空类型(Nullable Type)
    概述:
    其实是一个泛型类型。System.Nullable<T>,T必须为值类型。并且通过“?”来作一个语法的简化。用一句代码说明就是:
    int? x = null;
    引入NullableType获得的启示是,.Net的ORMapping可以做得更好了。
    语法点:
    使用HasValue属性判断是否为null。

    七、静态类(Static Class)
    概述:
    可以声明一个static class。该class不能被继承不能被实例化,只能包含静态成员。相当于sealed abstract。用途可以用作全局函数。另外Singleton模式的实现更方便了。
    语法点:
    不能有constructor,不能有实例成员,不能再使用sealed abstract修饰。不能继承其他类和实现任何interface。成员不能使用protected修饰符。

    八、属性访器访问修饰符
    概述:
    可以额外对get、set中的其中一个属性访问其使用一个访问修饰符。用途可以说是更灵活的封装吧。
    语法点:
    只能在get、set的一个中使用。接口中的属性访问器不能同样不能带有访问修饰符。索引器可以使用。

    九、命名空间别名限定符
    概述:可以使用双冒号“::”使用一个命名空间的别名。如
    using sc=System.Collection;
    那么使用的时候就可以写成sc::ArrayList()了。
    作用是更方便的调用不同命名空间下的同名类性。

          就写这主要的九点,其他还有的一些C#2.0的新特就不写了。因为离开发的使用更远了。总的来说除了泛型,2.0真的不是有很多的有用的变化。或许更应关注Framework的发展吧。以上的是我个人的归纳,写得不详细。如果真的想了解语法各位看官可要自己再查了。2.0已远处,C#3.0已经来了,一股LINQ的学习热潮到了。继续前行,学好新技术,更关键是用好新技术。

    本文为个人原创,转载请注明出自:http://jackma.cnblogs.com/ 
    Author:JackMa

  • 相关阅读:
    Django model 常用方法记录
    程序员的注意事项
    硬件天使的使用
    你是否应该成为一名全栈工程师?
    web技术
    6个处理上面代码异味的重构方法(手法)
    git 命定
    ie console报错
    apache 省略index.php访问
    myisam和innodb的区别
  • 原文地址:https://www.cnblogs.com/JackMa/p/1057349.html
Copyright © 2011-2022 走看看