C#新语法

C#新语法

一、顶级语句(C#9.0)
  1. 直接在C#文件中直接编写入口方法的代码,不用类,不用Main,经典写法仍然支持。在这里插入图片描述

  2. 同一个项目只能有一个文件具有顶级语句。

  3. 顶级语句中可以直接使用await语法,也可以声明函数

二、全局Using指令(C#10)
  1. 将global修饰符添加到using前,这个命名空间就应用到整个项目,不用重复using。
  2. 通常创建一个专门来编写全局using代码的C#文件。
  3. 如果csproj中启用了
<ImplicitUsings>enable</ImplicitUsings>

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

三、Using声明(C#8)

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

using SqlConnection conn = new SqlConnection("Data Source=.;InitialCatalog=db1;Integrated Security=True");
conn.Open();
using SqlCommand cmd = conn.CreatCommand();
cmd.CommandText = "select * from T";
using SqlDataReader reader = cmd.ExecuteReader();
While(reader.Read())
{
    string title = reader.GetString(reader.GetOrdinal("Title"));
    Concole.WriteLine(title);
}
四、文件范围的命名空间声明(C#10)
  1. 在之前版本的C#中,类型必须定义在namespace中。

  2. namespace TMS.Admin;
    Class Teacher
    {
        public int Id{get;set;}
        public string Name{get;set;}
    }
    
五、可空引用类型(C#8)
  1. csproj中enable启用可空引用类型检查。
  2. 在引用类型后添加“?”修饰符来声明这个类型是可空的。对于没有添加“?”修饰符的引用类型的变量,如果编译器发现存在这个变量赋值null的可能性的时候,编译器会给出警告信息。
六、记录(Record)类型(C#9)
  1. c#中的运算符默认是判断两个变量指向的是否是同一个对象,即使两个对象内容完全一样,也不相等。可以通过重写Equals方法、重写运算符等来解决这个问题,不过需要开发人员编写非常多的额外代码。

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

    public record Person(string FirstName,string LastName)

  3. Person p1 = new Person("xiao","mi");
    Person p2 = new Person("xiao","mi");
    Person p3 = new Person("xiao","sosa");
    Console.WriteLine(p1);
    Console.WriteLine(p1 == p2);
    Console.WriteLine(p1 == p3);
    Console.WriteLine(p1.FirstName);
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值