เมื่อคืนนี้ไมโครซอฟท์ปล่อย .NET 6 ตัวจริง โดยส่วนสำคัญส่วนหนึ่งคือตัวภาษา C# ที่ปรับเป็นเวอร์ชั่น 10 ที่มีการปรับปรุงภาษาหลายส่วน ฟีเจอร์สำคัญๆ ที่ปรับเปลี่ยนมาได้แก่
- ประกาศ using แบบ global: แทนที่จะประกาศใช้ namespace ทุกไฟล์ สามารถประกาศครั้งเดียวทั้งโครงการได้
- ใช้ namespace อัตโนมัติ (implicit using): สามารถคอนฟิกแต่ละโปรเจคให้เพิ่ม namespace อัตโนมัติได้เอง
- ประกาศ namespace ทั้งไฟล์: ในกรณีที่ทั้งไฟล์มี namespace เดียว สามารถประกาศ namespace แบบเดียวกับ using ทำให้ไม่ต้องวางโค้ดในปีกกาลงไปอีกชั้น
- คาดเดาชนิดตัวแปรอัตโนมัติ: หากข้อมูลเพียงพอให้คอมไฟล์เลอร์ทำนายชนิดตัวแปรที่ฟังก์ชั่น lambda คืนค่าอัตโนมัติ ในเวอร์ชั่นนี้โปรแกรมเมอร์ไม่ต้องระบุชนิดตัวแปรที่จะคืนค่าแล้ว
- รองรับ attribute กับ lambda: สามารถใช้ attribute กับ lambda ได้แบบเดียวกับฟัง์ชั่นปกติ
- constructor แบบไม่มีพารามิเตอร์สำหรับ struct: เดิม C# หากสร้าง struct โดยไม่มีพารามิเตอร์ ฟิลด์ต่างๆ จะถูกกำหนดเป็นค่าเริ่มต้นเองโดยไม่สามารถแก้ไขได้ แต่ในเวอร์ชั่นนี้จะสามารถเขียน constructor แบบไม่มีพารามิเตอร์ได้เองแล้ว
- record struct: จาก C# 9 ที่เพิ่ม record classses สำหรับการเปรียบเทียบค่ากัน (value-based equality) ในเวอร์ชั่นนี้สามารถประกาศแบบ struct ได้ด้วย
- ควบคุมการเติมค่าในสตริง (interpolarted string): การใช้สตริงที่มีตัวแปรต้องแทนค่าไปภายใน เช่น
$"Hello {args[0]}, how are you?"
เดิมคอมไพล์เลอร์จะเป็นผู้แปลงโค้ดให้เรียกฟังก์ชั่น string.Format
เอง ซึ่งบางกรณีการแทนค่าในสตริงนั้นเปลืองซีพียู และไม่จำเป็นเสมอไป (เช่น การเรียกฟังก์ชั่นดีบั๊ก) ใน C# 10 จะเปิดให้ฟังก์ชั่นควบคุมการแทนค่าในสตริงได้
สำหรับการเปลี่ยนแปลงทั้งหมดอ่านได้ในเอกสาร C# ของไมโครซอฟท์
ที่มา - Microsoft Dev Blog