C#各版本新功能 C#8.0

ReadOnly 成员

默认接口方法

接口里面的方法都是虚方法,字类不用写override 就能对其进行覆盖;

这与抽象类里面的方法是不同的,接口管理的更加随意;以后都可以用面向接口开发了;

若是同时继承了接口1跟接口2,接口1,2都实现了方法 TurnOnFor

    public interface Interface1
    {
        public void TurnOnFor(int duration)
        {
            Task.Delay(duration);
            Console.WriteLine("我是接口 Interface1 里面的原始方法");
        }
    }

    public interface Interface2: Interface1
    {
        public void TurnOnFor(int duration)
        {
        }
    }

   public class Child : Interface2
    {
    }

    Interface1 child = new Child();

    child.TurnOnFor(11); //调用接口1中的方法

    Interface2 child = new Child();

    child.TurnOnFor(11); //调用接口2中的方法

模式匹配增强

Using 声明 升级

  using() //以前
{}

//现在

using var file =***

//方法的最后会自动帮你释放

静态本地函数

添加 static 修饰符,以确保本地函数不会从封闭范围捕获(引用)任何变量

int M () {     int y = 5 ;     int x = 7 ;     return Add(x, y);

static int Add ( int left, int right ) => left + right; }

可处置的ref结构

可为空的引用类型

异步流

索引和范围

var words = new string[]
{
                // index from start    index from end
    "The",      // 0                   ^9
    "quick",    // 1                   ^8
    "brown",    // 2                   ^7
    "fox",      // 3                   ^6
    "jumped",   // 4                   ^5
    "over",     // 5                   ^4
    "the",      // 6                   ^3
    "lazy",     // 7                   ^2
    "dog"       // 8                   ^1
};              // 9 (or words.Length) ^0

var quickBrownFox = words[1..4];
var lazyDog = words[^2..^0];
var allWords = words[..]; // contains "The" through "dog".
var firstPhrase = words[..4]; // contains "The" through "fox"
var lastPhrase = words[6..]; // contains "the", "lazy" and "dog"

Null合并赋值

C# 8.0 引入了 null 合并赋值运算符 ??= 。 ok

仅当左操作数计算为 null 时,才能使用运算符 ??= 将其右操作数的值分配给左操作数 ok

非托管构造类型

嵌套表达式中的StackAlloc

内插逐字字符串的增强功能 ok

解释说明: $ 和 @,这两个符号谁在前面都可以了

posted @ 2020-03-19 14:59  maanshancss  阅读(1462)  评论(0编辑  收藏  举报