Record types ใน .NET 5 และ C# 9

.NET 5.0 มีการปรับปรุงประสิทธิภาพและเพิ่ม Feature ใหม่ๆ สำหรับบทความนี้ขอแนะนำให้รู้จักกับ Records Types ในภาษา C# ซึ่งเป็น Version 9.0 (C# 9)
หน้าปกบทความ Record types ใน .NET 5 และ C# 9
ทักษะ (ระบุได้หลายทักษะ)

Record types ใน .NET 5 และ C# 9

.NET 5.0 มีการปรับปรุงประสิทธิภาพและเพิ่ม Feature ใหม่ๆ สำหรับบทความนี้ขอแนะนำให้รู้จักกับ Records Types  ในภาษา C# ซึ่งเป็น Version 9.0 (C# 9)   
 

  • Records
    • Record types เป็นการเก็บค่าแบบ reference type ค่าตั้งต้นจะเป็น immutable หมายถึงสามารถจะกำหนดค่าตั้งต้นและเรียกใช้ค่าได้ แต่จะเปลี่ยนแปลงค่าภายหลังไม่ได้
    • Record types จะช่วยให้การสร้าง immutable reference types ง่ายมากขึ้น โดยในแบบเดิมจะต้องสร้างเป็น reference types (classes และ anonymous types) หรือเป็น value types (structs และ tuples) จากตัวอย่างคำสั่งรูปที่ 1
ตัวอย่าง code การกำหนด record type

รูปที่ 1
 

  • บรรทัดที่ 15-21 เป็นคำสั่งในการสร้าง Record Type ชื่อ Person
  • บรรทัดที่ 17-18 เป็นคำสั่งสร้าง Property ชื่อ FirstName และ LastName โดยกำหนดให้ get; จึงให้สามารถนำค่าไปใช้ได้อย่างเดียว ไม่มีการกำหนด set; เพื่อเปลี่ยนแปลงค่าได้
  • บรรทัดที่ 20 สร้าง Constructor ใช้สำหรับกำหนดค่าของ FirstName และ LastName เมื่อมีการสร้าง Object จาก Person
  • Record สามารถสืบทอดคุณสมบัติได้เหมือนกับ Class โดยบรรทัดที่ 23-29 แสดงคำสั่งการสร้าง Record ชื่อ Teacher ที่สืบทอดคุณสมบัติจาก Person
  • บรรทัดที่ 25 เป็นคำสั่งสร้าง Property ชื่อ Subject ใน Teacher
  • บรรทัดที่ 27-28 เป็นคำสั่งสร้าง Constructor ที่สืบทอดจาก Person เช่นกัน และเพิ่มให้สร้างกำหนดค่า Subject เข้าไปด้วย
  • บรรทัดที่ 31 เราสามารถป้องกันการนำ Record ไปสืบทอดคุณสมบัติโดยการระบุ Sealed เพิ่มไว้ ดังนั้นจึงไม่สามารถนำ Record Student ไปเป็นต้นแบบต่อได้

ในการสร้าง Records จะมีลักษณะเช่นเดียวกับการสร้าง Object จาก Class ตามรูปที่ 2

ตัวอย่าง code การสร้าง record type

รูปที่ 2
 

  • บรรทัดที่ 10-11 เป็นการสร้าง Object person และ student มาจาก Class Person และ Student ตามลำดับ
  • บรรทัดที่ 13 เป็นคำสั่งที่นำ Object ที่สร้างมาเปรียบเทียบกัน ซึ่งมีค่าเป็นเท็จ (false)
  • บรรทัดที่ 16 เป็นคำสั่งในการแสดงค่าด้วย method ToString() โดยค่าที่ได้จะนำด้วยชนิดของ Record และค่าที่เก็บไว้ เช่น Person { FirstName = Ekpongtorn, LastName = Ueaprasertvanich }

นอกจากนั้นแล้วเราสามารถสร้าง Record โดยใช้คำสั่งที่กระชับมาขึ้น เรียกว่า “positional records” ตามรูปที่ 3

ตัวอย่าง code positional records

รูปที่ 3
 

  • บรรทัดที่ 21-29 เป็นคำสั่งในการสร้าง Record เหมือนกับรูปที่ 2 แต่ไม่ต้องกำหนด Property และ Constructor แต่จะได้ผลที่เหมือนกัน

ดังนั้นจึงสรุปได้ว่า Record ที่ถูกเพิ่มมาใน .NET 5.0 จะช่วยให้การสร้าง Reference Type ที่ต้องเป็น immutable
คืออ่านค่าได้อย่างเดียวนั้นทำได้อย่างรวดเร็ว กระชับมากขึ้นและป้องกันการผิดพลาดอีกด้วย ลองนำไปใช้ดูนะครับ

ส่วน .NET 5.0 และ C# 9 มีลูกเล่นอะไรเพิ่มเติมอีก พบกันในตอนหน้าครับ