C#新语法

一、顶级语句(C#9.0开始)

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
View Code

1、一个项目中只能有一个顶级文件

2、顶级语句可以使用await语法,也可以申明静态方法

3、可以直接在Program写语句,不用写Main方法

参考:顶级语句

二、全局Using指令(C#10.0开始)

1、在using namespace前面加上global,该命名空间会应用到整个项目,注意不是整个解决方案,不用重复using

2、通常会单独新建一个C#文件来放全局的global using namespace

3、csproj文件中启用ImplicitUsings,编译器会自动隐式增加对于System、System.Linq等常用命名空间的引用,不同类型的项目引用的命名空间不一样;

     如果将ImplicitUsings设置为disable

参考 全局Using

三、Using声明(C#8.0开始)

1、在实现了IDisposable/IasyncDisposable接口类型的变量申明前加using,当代码执行离开变量作用域,对象就会被释放。

参考 Using声明

四、文件范围的命名空间声明(C#10.0开始)

namespace MyNamespace;
public class Dog{
   public long Id{get;set;}
   public string Name{get;set;}
}
View Code

参考 文件范围的命名空间声明

五、可为 null 的引用类型(C#8.0开始)

1、设置一个属性类型可为空使用?,想要去除编译器警告使用!

string? nullable;
string name;
Console.WriterLine(name!.toLower())
View Code

参考:可为 null 的引用类型

六、record类型(C#9.0开始)

1、record类型,编译器会自动生成Equal和GetHashcode等方法

public class Person{
    
   public Person(int id,string name){
       this.Id=id;
       this.Name= name;
   }
   
   public int Id {get;init;}
   public string Name{get;init}
    
} 

Person p1 =new Person(1,"zhangsan");
Person p2 =new Person(1,"zhangsan");
Console.WriteLine(p1.ToString()); //打印出类名
Console.WriteLine(p1==p2); //False
Console.WriteLine(p1.Equal(p2)); //False
//==和Equal比较的是判断两个变量是否指向同一个对象

//Record类型
public record Person(int Id,string Name,int Age);
Person p3 =new Person(1,"zhangsan");
Person p4 =new Person(1,"zhangsan");
Person p5 =new Person(1,"lishi");
Console.WriteLine(p3.ToString()); //类中的属性数据
Console.WriteLine(p3==p4); //True
Console.WriteLine(p3==p5); //False
View Code

参考 record类型

 

 

 

参考: https://learn.microsoft.com/zh-cn/dotnet/core/tutorials/top-level-templates#global-using-directives

   https://learn.microsoft.com/zh-cn/dotnet/csharp/fundamentals/program-structure/top-level-statements

posted on 2023-09-11 11:27  lovezj9012  阅读(66)  评论(0编辑  收藏  举报

导航