zoukankan      html  css  js  c++  java
  • C# 2.0

    序言

    泛型

    为什么需要泛型?

    分部类型

    分部类和方法

    partial

    匿名方法

    使用Delegate的时候很多时候没必要使用一个普通的方法,因为这个方法只有这个Delegate会用,并且只用一次,这时候使用匿名方法最合适。

    delegate 运算符创建一个可以转换为委托类型的匿名方法:

    Func<int, int, int> sum = delegate (int a, int b) { return a + b; };
    Console.WriteLine(sum(3, 4));  // output: 7

    从 C# 3 开始,lambda 表达式提供了一种更简洁和富有表现力的方式来创建匿名函数。 使用 => 运算符构造 lambda 表达式:

    Func<int, int, int> sum = (a, b) => a + b;
    Console.WriteLine(sum(3, 4));  // output: 7

    使用 delegate 运算符时,可以省略参数列表。 如果这样做,可以将创建的匿名方法转换为具有任何参数列表的委托类型,如以下示例所示:

    Action greet = delegate { Console.WriteLine("Hello!"); };
    greet();
    
    Action<int, double> introduce = delegate { Console.WriteLine("This is world!"); };
    introduce(42, 2.7);
    
    // Output:
    // Hello!
    // This is world!

    可以为null的值类型

    引用类型可以为空,但是值类型不能为空。在一些的情况下,这可能就是一个坑,比方说当数据库或者XML的数据映射到C#类型上时,因为数据库和XML在int和double等值类型(C#)可以为null,但是C#类型不能为null。

    C#有一个解决方案:可以为空的值类型

    int x1 = 1;
    int? x2 = null;

    正常的值类型可以赋值给可以为空的值类行,但是反过来不行,需要强制类型转换

    x2=x1;//这是可行的
    x1=x2;//这不可行
    x1=(int)x2;//这将可行

    如果在赋值的时候不知道该值是否为空,这可以使用HasValue来判断是否为空,如果为空则true,否则为false

    int x3 = x2.HasValue ? x2.Value : -1;

    如果操作的是 可为空的值类型,则可以简写语法。如果为空,这赋值-1,否者赋值x3的值。

    int x6 = x3 ?? -1;

    迭代器

      C#中的迭代器可以让你实现foreach访问某个集合中的所有元素。像数组、集合等已经内置了迭代器,我们可以直接进行foreach,而我们自定义的类型,自然是无法进行这个操作的,对于自定义的类型实现迭代器模式通过IEnumerable和IEnumerator接口(或泛型接口)进行实现。在C#1.0中我们自定义类型实现迭代器是非常繁琐的想要对IterationSample进行foreach,首先继承IEnumerable接口,会有一个GetEnumerator的方法需要去实现,这时创建另一个类实现IEnumerator接口,实现MoveNext方法与Current属性,我们需要进行位置的处理。

      这里在C#2.0中变的简单了,这时使用yield return就可以代替整个IterationSampleIterator这个类。

    static void Main()
    {
        foreach (int number in SomeNumbers())
        {
            Console.Write(number.ToString() + " ");
        }
        // Output: 3 5 8
        Console.ReadKey();
    }
    
    public static System.Collections.IEnumerable SomeNumbers()
    {
        yield return 3;
        yield return 5;
        yield return 8;
    }
    View Code

    协变和逆变

    在 C# 中,协变和逆变能够实现数组类型、委托类型和泛型类型参数的隐式引用转换。 协变保留分配兼容性,逆变则与之相反。

    除现有功能以外的其他 C# 2.0 功能:

    getter/setter 单独可访问性

    方法组转换(委托)

    静态类

    委托推断

    资料

  • 相关阅读:
    AX 利用windows粘贴板功能实现批量数据快速导出EXCEL
    在ax中怎么对enum类型循环取其中每一个值
    vba 快速定位当前EXCEL最后一栏
    在AX4.0中使用C#脚本的实现
    悟透javascript
    SIGAI机器学习第四集 基本概念
    SIGAI机器学习第十七集 线性模型1
    胸小肌的重要性
    SIGAI机器学习第十六集 支持向量机3
    英语听力
  • 原文地址:https://www.cnblogs.com/cnki/p/12005233.html
Copyright © 2011-2022 走看看