c#8.0

接口的默认实现

实现类中可以不实现接口中有默认实现的方法,以下代码不报错

public interface IPerson
    {
        void Say()
        {
            Console.WriteLine("hello");
        }
    }
public class Teacher:IPerson
    { 
    
    }

但是不可以通过实现类的实例调用接口中的方法,因为没有实现,只能通过接口调

IPerson p = new Teacher();
p.Say();

接口的静态成员

public interface IPerson
    {
        private static string DefaultName = "fan";
        static void SetDefaultName(string name)
        {
            DefaultName = name;
        }
    }

然后在调用的时候,我们可以在IPerson接口上先设置默认值:

IPerson.SetDefaultName("fan11111");
IPerson p = new Teacher();

Deconstructor 和 位置匹配模式

public class Student
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public Student(string name, int age)
        {
            Name = name;
            Age = age;
        }
        public Student() { }
        public void Deconstruct(out string name, out int age)
        {
            name = Name;
            age = Age;
        }
    }

这里面的下划线叫做“discard”(丢弃),表示我们不会使用它不关心它。 类中需要加Deconstruct方法

            Student s = new Student("fan", 18);
            bool r1 = s is Student(_, 15);//false
            bool r2 = s is Student("fan", _);//true
            bool r3 = s is { Name: "fan", Age: 18 };//属性匹配,true
            bool r4 = s is Student && s is { Name: "fan", Age: 18 };//同时判断类型和属性值

Range类型

用于方便的从一个序列中提取一个子序列

            int[] numbers = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            Range range = 1..5;//索引范围:1,2,3,4  不包括5
            int[] numbers1 = numbers[range];//2,3,4,5
            int[] numbers2 = numbers[..];//1,2,3,4,5,6,7,8,9,10

Index类型

            Index index1 = ^2;//倒数第二
            Index index2 = ^0;//相当于arr.Length
            int[] numbers3 = numbers[3..^2];//4, 5, 6, 7, 8
            int[] numbers4 = numbers[0..^0];//相当于numbers[..]
            int[] numbers5 = numbers[^4..];//7,8,9,10
            int number = numbers[^1];//10,倒数第一个元素
原文地址:https://www.cnblogs.com/fanfan-90/p/14106084.html