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
รูปที่ 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 ไปเป็นต้นแบบต่อได้
รูปที่ 2
- บรรทัดที่ 10-11 เป็นการสร้าง Object person และ student มาจาก Class Person และ Student ตามลำดับ
- บรรทัดที่ 13 เป็นคำสั่งที่นำ Object ที่สร้างมาเปรียบเทียบกัน ซึ่งมีค่าเป็นเท็จ (false)
- บรรทัดที่ 16 เป็นคำสั่งในการแสดงค่าด้วย method ToString() โดยค่าที่ได้จะนำด้วยชนิดของ Record และค่าที่เก็บไว้ เช่น Person { FirstName = Ekpongtorn, LastName = Ueaprasertvanich }
รูปที่ 3
คืออ่านค่าได้อย่างเดียวนั้นทำได้อย่างรวดเร็ว กระชับมากขึ้นและป้องกันการผิดพลาดอีกด้วย ลองนำไปใช้ดูนะครับ
ส่วน .NET 5.0 และ C# 9 มีลูกเล่นอะไรเพิ่มเติมอีก พบกันในตอนหน้าครับ
- บรรทัดที่ 21-29 เป็นคำสั่งในการสร้าง Record เหมือนกับรูปที่ 2 แต่ไม่ต้องกำหนด Property และ Constructor แต่จะได้ผลที่เหมือนกัน
คืออ่านค่าได้อย่างเดียวนั้นทำได้อย่างรวดเร็ว กระชับมากขึ้นและป้องกันการผิดพลาดอีกด้วย ลองนำไปใช้ดูนะครับ
ส่วน .NET 5.0 และ C# 9 มีลูกเล่นอะไรเพิ่มเติมอีก พบกันในตอนหน้าครับ