zoukankan      html  css  js  c++  java
  • C# 2.0 的特性 总结

    针对于.NET SDK 2.0(相对应于ECMA-334 标准第三版),C# 的新特性有:

     分部类分部类将类型的实现分在多个文件中

    file1.cs:

    public partial class MyClass1
    {
        public void MyMethod1()
        {
            // implementation
        }
    }
    file2.cs:

    public partial class MyClass1
    {
        public void MyMethod2()
        {
            // implementation
        }
    }
    分部类这个特性允许将一个类的编写工作分配给多个人,一人写一个文件,便于版本控制。它又可以隔离自动生成的代码和人工书写的代码,例如设计窗体应用程序时。

     泛型

    或参数化类型,是被C#支持的.NET 2.0特性。不同于C++模版,.NET 参数化类型是在运行时被实例化,而不是编译时,因此它可以跨语言,而C++模版却不行。它支持的一些特性并不被C++模版直接支持,比如约束泛型参数实现一个接口。另一方面,C# 不支持无类型的泛型参数。不像Java中的泛型,在CLI虚拟机中,.NET generics 使用 具化 生成泛型参数,它允许优化和保存类型信息。[1]

     静态类

    静态类它不能被实例化,并且只能有静态成员。这同很多过程语言中的模块概念相类似。

     迭代器

    一种新形式的迭代器 它提供了函数式编程中的generator,使用yield return

    类似于Python中使用的yield

    // Method that takes an iterable input (possibly an array)
    // and returns all even numbers.
    public static IEnumerable<int> GetEven(IEnumerable<int> numbers)
    {
        foreach (int i in numbers)
        {
            if (i % 2 == 0) yield return i;
        }
    }

     匿名方法

    匿名方法类似于函数式编程中的闭包。[2]

    public void Foo(object parameter)
    {
        // ...
     
        ThreadPool.QueueUserWorkItem(delegate
        {
            // anonymous delegates have full access to local variables of the enclosing method
            if (parameter == ...)
            {
                // ...
            }
     
            // ...
        });
    }


    委托的协变和逆变委托签名的协变和逆变

    属性访问器可以被单独设置访问级别例子:

    string status = string.Empty;
     
    public string Status
    {
        get { return status; }             // anyone can get value of this property,
        protected set { status = value; }  // but only derived classes can change it
    }


    可空类型可空类型 (跟个问号, 如 int? i = null;) 允许设置 null 给任何类类型。

    int? i = null;
    object o = i;
    if (o == null)
        Console.WriteLine("Correct behaviour - runtime version from September 2005 or later");
    else
        Console.WriteLine("Incorrect behaviour - pre-release runtime (from before September 2005)");


     ??操作符(??) 用于如果类不为空值时返回它自身,如果为空值则返回之后的操作

    object nullObj = null;
    object obj = new Object();
    return nullObj ?? obj; // returns obj
    主要用作将一个可空类型赋值给不可空类型的简便语法

    int? i = null;
    int j = i ?? 0; // Unless i is null, initialize j to i. Else (if i is null), initialize j to 0.

    很多.net程序员对某些概念不是很了解,这里做简单说明 欢迎补充!

    产品思维的PM程序员~
    工作1-3年,基础知识,多看书。多跟着别人做项目,学习经验。 工作3-5年,新知识,高级知识,自己独立做项目,总结经验。尝试不同的语言。 工作5-8年,工作职位,要从设计,管理方面要求自己,可以尝试走管理路线(项目经理或cto)。 工作10年及以上, 自己做些项目,产品,尝试为创业做准备。 上大学和不上大学区别很大,上品牌大学和普通大学区别也很大,后天的努力最大。 ---无论它是在遥远的远方,还是在出发的地方、哪里有希望哪里就是我们的方向;终点、只不过是梦想起飞的地方。
    Top
    收藏
    关注
    评论
  • 相关阅读:
    BDB
    nginx配置文件祥解
    区分虚方法,抽象方法如此简单
    nginx+tomcat集群负载均衡(实现session复制)
    nginx配置conf
    高手博客 网址收藏
    IE6,7,8下使用Javascript记录光标选中范围(已补全)(已解决单个节点内部重复字符的问题)
    (造福中国前端界)纯前端Js完美解决各种汉字urlencode,urldecode,编码解码问题,不借助任何字库,内码表,轻松一行,兼容IE8+,chrome,firefox,safari等主流浏览器
    共享两个最近手机项目的HTML5的widget,星星评级以及标签选项卡,样式美观,iphone/android可用
    共享下改进后的combox,页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
  • 原文地址:https://www.cnblogs.com/softwarelanguagebs/p/2120705.html
Copyright © 2011-2022 走看看