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 单独可访问性

    方法组转换(委托)

    静态类

    委托推断

    资料

  • 相关阅读:
    UOJ.26.[IOI2014]Game(交互 思路)
    Good Bye 2016 F.New Year and Finding Roots(交互)
    Codeforces.835E.The penguin's game(交互 按位统计 二分)
    Codeforces.744B.Hongcow's Game(交互 按位统计)
    Codeforces.862D.Mahmoud and Ehab and the binary string(交互 二分)
    正睿OI 提高 Day1T3 ZYB玩字符串(DP)
    划分vlan
    2三层交换机实现vlan间的路由
    交换机基础-交换机远程telnet
    自动化运维环境的搭建问题处理
  • 原文地址:https://www.cnblogs.com/cnki/p/12005233.html
Copyright © 2011-2022 走看看