C#新语法

发布时间 2023-07-07 14:26:06作者: 小溪_1
  • 顶级语句
    1. C#9.0开始,C#增加了“顶级语句”,使得可以在C#文件中编写入口代码,不在需要类和方法。
    2.  Console.WriteLine("Hello, World!"); 
    3. 编译器自动生成Program类,并且将我们编写的代码放入该类中 顶级语句功能让编译器简化工作。
    4. 注意:同一个项目中只能有一个文件具有顶级语句
  • 全局using指令
    1. 将global修饰符添加到任何using关键字前,不需要重复引入到命名控件了。
    2. global using System.Text.Json;
      

        只需在*.csproj文件中加入<ImplicitUsing>enable</ImplicitUsing>,编译器会根据项目类型自动为项目隐式添加对System.Text.Json等命名空间的引入。

    3. 全局using指令大大减少了项目中引入命名空间代码量。
  • using 声明
    1.   如果类型实现了IDisposable或IAsyncDisposable接口,那么可以在变量声明前加入using关键字。这样当代码执行离开被using修饰的变量作用域的时候,变量所指向的对象的Disponse就会被调用。
    2. string connStr = "数据库访问连接字符串";
      using var conn = new SqlConnection(connStr);
      conn.Open();
      using var cmd = conn.CreateCommand();
      cmd.CommandText = "select * from T_Users";
      using var reader = cmd.ExecuteReader();
      while (reader.Read()) { 
      
      }
      
    3.   {
          using var outStream = File.OpenWrite("e:\\1.txt");
          using var writer = new StreamWriter(outStream);
          writer.WriteLine("hello");
      }//不加入括号。会报异常。因为1.txt文件被占用。 这样操作是释放资源
      string s = File.ReadAllText("e:\\1.txt");
      Console.WriteLine(s);
  • 记录类型
    1.  C#中 ==运算符默认判断两个变量是否指向同一个对象 
    2. 如果两个对象是同一种类型,并且所有属性完全相等 ,但是他们两个是属于不同对象,==比较的结果是false.则可以通过重写Equals方法来解决这个问题。
    3. record类型的语法,编译器会自动生成Equals方法,GetHashcode等方法
       public record User
          {
              public int Id { get; set; }
      
              public string Name { get; set; }
      
              public int Age { get; set; }
      
              public override string ToString()
              {
                  return $"编号{Id},姓名{Name},年龄{Age}";
              }
          }
      
      
      User u = new User { Id = 1, Name = "zz" };
      User u1 = new User { Id = 1, Name = "zz" };
      User u2 = new User { Id = 2, Name = "zz1" };
      Console.WriteLine(u);
      Console.WriteLine(u == u1);
      Console.WriteLine(u == u2);
      

        编译结果:

    4. 编译器会为record类型生成ToString()方法和Equal()方法,