Net6新语法

Net6新语法

1.1 顶级语句

  • 直接在C#文件中直接编写入口方法的代码,不用类,不用Main。经典写法仍然支持。反编译一下了解真相。
  • 同一个项目中只能有一个文件具有顶级语句。
  • 顶级语句中可以直接使用await语法,也可以声明函数

编译器帮忙生成了命名空间、类名、方法名

image-20220304212807483

1.2 全局Using指令

  • 将 global 修饰符添加到 using 前,这个命名空间就应用到整个项目,不用重复using。
  • 通常创建一个专门用来编写全局using代码的C#文件

image-20220304213924944

  • 如果csproj中启用了enable,编译器会自动隐式增加对于System、System.Linq等常用命名空间的引入,不同各类型项目引入的命名空间也不一样。

image-20220304214039804

1.3 Using声明

在实现了Idisposable/IAsyncDisposable接口的类型的变量声明前加上using当代码执行离开变量的作用域时,对象就会被释放。

{
  using var outStream = File.OpenWrite("e:/1.txt");
  using var writer = new StreamWriter(outStream);
}
writer.WriteLine("hello");
string s = File.ReadAllText("e:/1.txt");
Console.WriteLine(s);

1.4 文件范围的命名空间声明

可以省略namespace的大括号

image-20220304215645896

1.5 可空引用类型

  • C#数据类型分为值类型和引用类型两种,值类型的变量不可以为空,而引用类型变量可以为空
  • csproj中enable启用可空引用类型检查

image-20220304221005249

  • 如果字段可能为null,编译器会警告

image-20220304221134605

  • 类型加 ? ,允许为null,警告消失

image-20220304221234362

  • 字段允许null,使用时会警告

image-20220304222002205

  • 消除警告的俩种方式

if非null判断和字段名后加"!"

image-20220304222142367

1.6 record类型基础

(1)init 只能在构造函数内赋值

image-20220304223923805

(2)在C#9.0中增加了记录(record)类型的语法,编译器会为我们自动生成Equals、GetHashcode等方法。

image-20220304224430983

(3)record就是普通的一个类

(4)可以实现部分属性是只读的、而部分属性是可以读写。

image-20220304232002989

image-20220304232629402

(5)默认生成的构造方法的行为不能修改,我们可以为类型提供多个构造方法,然后其他构造方法通过this调用默认的构造方法

image-20220304232935855

(6)record也是普通类,变量的赋值是引用的传递。这是和结构体不同之处。

(6)with关键字生成对象的副本

既可以默认p1对象的所有属性值,也可以在with里重新赋值

image-20220304233515126

posted @ 2022-04-08 17:47  peng_boke  阅读(1229)  评论(0编辑  收藏  举报