Constructor Overloading
วรเมธ อภิวังโสกุล 650710580
Constructor Overloading ในภาษา C# คือการสร้าง Constructor อย่างน้อย 2 ตัวในคลาสเดียวกัน โดย C# สามารถแยก Constructor ที่มี Signatures ต่างกันได้ แต่ละตัวมีการรับพารามิเตอร์ต่างกัน เช่น จำนวนของพารามิเตอร์ (Number of Parameters) , ประเภทของพารามิเตอร์ (Types of Parameters) , ลำดับของพารามิเตอร์ (Order of Parameters)
Static Constructor ไม่สามารถ Overload ได้ เพราะเป็น Constructor ที่ไม่มีพารามิเตอร์ แต่สำหรับการ Overload จำเป็นต้องมี Constructor ที่มีพารามิเตอร์
Private Constructor สามารถ Overload ได้ และสามารถใช้เป็น Instance ของคลาสในคลาสเดียวกันได้ และไม่สามารถเข้าถึง Private Member จากภายนอกคลาสได้
ตัวอย่างเช่น :
1. จำนวนของพารามิเตอร์ต่างกัน (Different Number of Parameters)
Output
2. ประเภทของพารามิเตอร์ต่างกัน (Different Types of Parameters)
Output
3. ลำดับของพารามิเตอร์ต่างกัน (Different Order of Parameters)
Output
การเปรียบเทียบกับภาษา Java/C++/Python
C# สามารถสร้าง
constructor หลายตัวใน class เดียวกันได้ โดยแต่ละ constructor จะมี signature ที่ต่างกัน ( เช่น จำนวน , ประเภทหรือลำดับของ parameter ) ซึ่งช่วยให้สร้าง object ด้วยวิธีที่หลากหลายได้
Java การ Constructor Overloading มีลักษณะการทำงานคล้ายกับ C# โดยสามารถสร้าง
constructor หลายตัวได้โดยการเปลี่ยนแปลงจำนวนหรือประเภทของ parameter
C++ มีการทำ Constructor Overloading
ได้เหมือนกับ C# , Java โดยใช้หลักการเดียวกันคือ การเปลี่ยนแปลงจำนวนหรือประเภท parameter ของ constructor แต่ละตัว
Python ไม่มีการ Constructor Overloading โดยตรง แต่สามารถจำลองการทำงานได้โดยใช้ค่าเริ่มต้น (Default Arguments) หรือตรวจสอบจำนวนพารามิเตอร์ที่รับเข้ามาในฟังก์ชัน __init__
Code ตัวอย่าง
Output
สรุปเปรียบเทียบ
การ Overloading
รองรับโดยตรง
รองรับโดยตรง
รองรับโดยตรง
ไม่รองรับโดยตรง (ต้องใช้ default parameters)
การเรียกใช้ Constructor
ชัดเจน ง่าย
คล้าย C#
ใช้ Syntax ที่คล้าย Java/C#
ใช้ if-else เพื่อตรวจสอบพารามิเตอร์
จากตารางจะเห็นว่า Python มีวิธีจัดการที่ต่างจากภาษาอื่น เนื่องจากไม่มีการรองรับ Constructor Overloading โดยตรง แต่การใช้ Default Parameters ก็ช่วยทำให้มีความยืดหยุ่นมากขึ้น ในขณะที่ C#, Java, และ C++ มีการ Constructor Overloading ที่ชัดเจนและง่ายต่อการใช้งานมากกว่า
ข้อดีของการ Overloading คือ
ประหยัดพื้นที่หน่วยความจำ , consistency และ readability
สามารถนำโค้ดมา reusability เพื่อประหยัดหน่วยความจำ
โปรแกรมทำงานได้เร็วขึ้น
การบำรุงรักษาโค้ดได้ง่าย
ลดการใช้ชื่อฟังก์ชันที่แตกต่างกันสำหรับการดำเนินการประเภทเดียวกัน
สามารถพัฒนาฟังก์ชันได้มากกว่าหนึ่งฟังก์ชันที่มีชื่อเดียวกัน แต่อาร์กิวเมนต์ที่ส่งผ่านควรเป็นประเภทที่แตกต่างกัน
ข้อเสียของการ Overloading คือ
การประกาศฟังก์ชันที่ต่างกันเฉพาะใน return type ไม่สามารถโอเวอร์โหลดได้
หากมีการประกาศฟังก์ชัน static member พารามิเตอร์เดียวกันหรือ name types เดียวกันจะไม่สามารถโอเวอร์โหลดได้
คลิปนำเสนอ
Presentation Silde
Referance
soumikmondal. (24 Mar, 2023). C# | Constructor Overloading. GeeksforGeeks. https://www.geeksforgeeks.org/c-sharp-constructor-overloading/
Javatpoint. (n.d.). C# Member Overloading. https://www.javatpoint.com/c-sharp-member-overloading
Programiz. (n.d.). C# Constructor Overloading. https://www.programiz.com/csharp-programming/constructor-overloading
w3schools. (n.d.). C# Method Overloading. https://www.w3schools.com/cs/cs_method_overloading.php
tutorialspoint. (n.d.). C# - Polymorphism. https://www.tutorialspoint.com/csharp/csharp_polymorphism.htm
GeeksforGeeks. (16 Jun, 2023). Constructor Overloading in Java. https://www.geeksforgeeks.org/constructor-overloading-java/
I.HARISH KUMAR. (14 Sep, 2023). Constructor Overloading in C++. GeeksforGeeks. https://www.geeksforgeeks.org/constructor-overloading-c/
sunderrcrqw. (01 Mar, 2024). Method And Constructor Overloading In Python. https://www.geeksforgeeks.org/method-and-constructor-overloading-in-python/
Last updated