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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM