Different ways to create an Object
ธัญชนก จัตตุพงศ์ 650710553
ในภาษา C# การสร้างวัตถุ (Object) ได้หลายวิธีและเราจะมาดูกันว่าสามารถทำวิธีไหนได้บ้าง
1.การใช้ new operator
คำสั่ง new เป็น operator ที่ใช้เพื่อสร้างอินสแตนซ์ (instance) ของคลาสหรือที่เราเรียกว่าวัตถุ โดยจะกำหนดพื้นที่ในหน่วยความจำให้กับวัตถุระหว่างรันไทม์เท่านั้น ซึ่งหมายความว่าเป็นการจัดสรรพื้นที่แบบไดนามิก อยู่ในหน่วยความจำ heap ซึ่งหากไม่มีคำสั่ง new ก็จะไม่มีการจองพื้นที่ให้กับหน่วยความจำ ทำให้ตัวแปรที่อ้างอิงถึงวัตถุนั้นมีค่าเป็น null
syntax
โดย ObjectName คือ ชื่อตัวแปรที่กำหนดให้วัตถุ className คือ ชื่อคลาสที่ต้องการสร้างวัตถุ new คือ คำสั่งในการสร้าง instance ของคลาส className className() คือ เมธอดที่ใช้สำหรับกำหนดค่าเริ่มต้นให้กับวัตถุเมื่อมันถูกสร้างขึ้น(Constructor)
ตัวอย่าง
จากโค้ดจะมีสร้างวัตถุในบรรทัดที่ 7 มี Car c= new Car();
จะเป็นการสร้างวัตถุจากคลาส Car ชื่อว่า c โดยใช้คำสั่ง new ตามด้วย Car() ซึ่งเป็น constructor
2.สร้างการอ้างอิง(reference)สำหรับวัตถุที่มีอยู่แล้ว
การอ้างอิง สามารถประกาศได้โดยใช้ชื่อคลาสและชื่อตัวแปรที่ใช้ในการอ้างอิง (reference variable) ซึ่งตัวแปรใหม่นี้จะชี้ไปยังวัตถุที่มีอยู่แล้วในหน่วยความจำ ดังนั้นเมื่อมีการเปลี่ยนแปลงค่าผ่านตัวแปรที่อ้างอิง การเปลี่ยนแปลงนี้จะมีผลต่อวัตถุที่ทุกตัวแปรอ้างถึง เพราะตัวแปรทั้งหมดชี้ไปยังวัตถุเดียวกัน เหมือนกับการใช้นามแฝง(alias) สำหรับวัตถุเดียวกัน
syntax
โดย RefName คือ ชื่อตัวแปรของคลาสที่อยากอ้างอิง และตัวแปร objectName คือวัตถุที่ถูกสร้างขึ้นมาแล้ว โดยในที่นี้ Refname อ้างอิง objectName นั่นเอง
ตัวอย่าง
จากโค้ดในบรรทัดที่ 21 จะมีการสร้างการอ้างอิง โดยประกาศตัวแปรใหม่ชื่อ person2 ที่จะให้อ้างอิงไปยังวัตถุเดียวกันกับ person1
3.สร้างอาเรย์ของวัตถุ
เราสามารถสร้างวัตถุเป็นอาเรย์ได้เมื่อเราอยากสร้างหลายวัตถุจากคลาสเดียวกัน โดยการประกาศอาเรย์จากนั้นกำหนดชื่อคลาสและขนาดของอาเรย์ที่ต้องการเก็บวัตถุ จากนั้นกำหนดค่าให้กับองค์ประกอบแต่ละตัว คือ สร้างวัตถุใหม่และเก็บลงในแต่ละตำแหน่งของอาเรย์ ทั้งนี้เราอาจใช้ for loop ช่วยทำการกำหนดค่าของวัตถุแต่ละตัวหรือสร้างวัตถุใหม่เก็บลงแต่ละตำแหน่งในอาเรย์ได้อัตโนมัติก็ได้
syntax
ประกาศอาเรย์โดย className คือ คลาสที่ต้องการสร้างอาเรย์ของวัตถุ arrayName คือ ชื่ออาเรย์ size คือ ขนาดอาเรย์(จำนวนวัตถุ)
ตัวอย่าง (สร้างวัตถุแบบไม่ใช้ for loop)
จากโค้ดในบรรทัดที่ 25 จะมีการประกาศอาเรย์ของวัตถุ โดยเก็บวัตถุ employee ได้ 3 ตัว และสร้างวัตถุในบรรทัดที่ 27-29 โดยแต่ละตำแหน่งของอาเรย์จะถูกกำหนดให้เป็นวัตถุใหม่จากคลาส employee ซึ่งใช้คำสั่ง new
หากอยากใช้ for loop ในการสร้างวัตถุแบบอัตโนมัติสามารถแก้ไขใน method Main( ) และเราจะมีการกำหนดค่าแบบอาร์เรย์ไปพร้อมกันกับการสร้างวัตถุ ซึ่งสามารถทำได้ดังนี้
4.แบบ Type Inference
เป็นการสร้างวัตถุขึ้นมาโดยใช้คำสั่ง var ร่วมกับคำสั่ง new ส่งผลให้ทำให้ตัวแปรของวัตถุนั้นมีชนิดข้อมูลตรงกับวัตถุที่ถูกสร้างขึ้นโดยไม่ต้องระบุชนิดข้อมูลชัดเจน
syntax
ตัวอย่าง
ในบรรทัดที่ 25 เป็นการสร้างวัตถุใหม่จากคลาส Customerโดยใช้ตัวแปรที่ถูกประกาศด้วยคำสั่ง var ซึ่งตัวแปร customer จะถูกกำหนดชนิดข้อมูลให้เป็น Customer โดยอัตโนมัติ และมีคอนสตรัคเตอร์ซึ่งรับพารามิเตอร์ 3 ตัว คือ ID, Name, Email
การสร้าง object ระหว่างภาษา C,Java และ Python
C++- การสร้างวัตถุของภาษานี้ทำได้ด้วยการระบุชื่อคลาสตามด้วยชื่อวัตถุ
Java- ในการสร้างวัตถุจากคลาสใดๆ ให้ระบุชื่อคลาส ตามด้วยชื่อวัตถุ และใช้คำสั่ง new ซึ่งการสร้างวัตถุใน Java มีความคล้ายคลึงกับการสร้างวัตถุใน C# เพราะทั้งสองภาษาใช้แนวคิด OOP และ วิธีการใช้งานรวมถึงการเข้าถึงเมธอดที่คล้ายกัน
Python-การสร้างวัตถุใน Python ทำได้ง่าย มีความยืดหยุ่นมากกว่า C# เพราะ C# เป็น statically typed language ต้องระบุชนิดข้อมูลในการประกาศตัวแปร ส่วน python เป็นแบบ Dynamically typed language ไม่จำเป็นต้องระบุชนิดข้อมูลในการประกาศตัวแปร ทำให้สามารถเปลี่ยนแปลงประเภทของข้อมูลที่เก็บได้ในระหว่างการรันโปรแกรม
ตัวอย่าง
output
อธิบายส่วนที่มีการสร้างวัตถุของ C++, Java และ Python จากโค้ดข้างบน
บรรทัดที่ 23 Person person1;
คือการสร้างตัวแปร person1 ซึ่งเป็น instance ของ class Person โดย person1 เป็นวัตถุที่มีสมาชิกภายในคือ name และ age ซึ่งสามารถเข้าถึงได้ผ่านวัตถุนี้ รวมถึงการใช้ฟังก์ชันภายในคลาส Person อีกด้วย ทั้งนี้เนื่องจากไม่มีคำสั่ง new จึงจัดสรรพื้นที่ใน stack ซึ่งวัตถุจะถูก deallocate โดยอัตโนมัติเมื่อออกจากขอบเขต หรือในที่นี้คือเมื่อฟังก์ชัน main() จบการทำงาน และถ้าเราอยากใช้คำสั่ง new สามารถทำได้ดังนี้
ในบรรทัดที่ 4 Person* person1 = new Person;
ด้วยคำสั่ง new นี้ จะทำให้จองพื้นที่ใน heap โดยมี pointer person1 ชี้ไปที่วัตถุ Person เพื่ออ้างอิงและต้องมีการใช้ delete กับ person1 เพื่อคืนหน่วยความจำเมื่อไม่ต้องการใช้อีกต่อไป ซึ่งต่างจาก C# ที่มี garbage collector คอยจัดการ deallocate พื้นที่ของวัตถุให้อัตโนมัติ
PDF-Different ways to create an Object
Different way to create an object
VDO
Reference
ภาษา C#
หัวข้อ คำสั่ง new, การสร้างการอ้างอิง (reference) และ หัวข้อสร้างอาเรย์ของวัตถุ
manasikirloskar. (2021, August 18). Different ways to create an Object in C#. GeeksforGeeks. https://www.geeksforgeeks.org/different-ways-to-create-an-object-in-c-sharp/
หัวข้อ คำสั่ง new
BillWagner. (2023, November 14). new operator - Create and initialize a new instance of a type - C# reference. Microsoft Learn. https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/new-operator
C# Classes and Objects. (n.d.). W3Schools. https://www.w3schools.com/cs/cs_classes.php
หัวข้อการสร้างการอ้างอิง (reference)
BillWagner. (2021, September 17). Objects - create instances of types - C#. Microsoft Learn. https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/object-oriented/objects
หัวข้อสร้างอาเรย์ของวัตถุ
Zeeshan, M. (2024, February 2). How to declare an array of objects in C#. Delft Stack. https://www.delftstack.com/howto/csharp/csharp-array-of-objects/
หัวข้อ แบบ Type Inference
ศุภชัย สมพานิช. (2566). คู่มือ Codingและพัฒนาแอปพลิเคชันด้วย C# (พิมพ์ครั้งที่ 1). ไอดีซีฯ.
ภาษา C++
Kexugit. (2019, October 24). C++ -> C#: What You Need to Know to Move from C++ to C#. Microsoft Learn. https://learn.microsoft.com/en-us/archive/msdn-magazine/2001/july/c-csharp-what-you-need-to-know-to-move-from-c-to-csharp
Dang, T. (2024, September 24). C# vs C++: A Side-by-Side Comparison for Beginners. Orient Software. https://www.orientsoftware.com/blog/csharp-vs-cplusplus/
Abhirav Kariya. (2024, July 15). C++ classes and objects. GeeksforGeeks. https://www.geeksforgeeks.org/c-classes-and-objects/
pikuma. (2021, March 2). C++ Objects: Stack vs. Heap [Video]. YouTube. https://www.youtube.com/watch?v=PCnDoknVFK4
ภาษา Java
How to create object in Java - Javatpoint. (n.d.). javatpoint. https://www.javatpoint.com/how-to-create-object-in-java
Java Classes and Objects. (n.d.). W3Schools. https://www.w3schools.com/java/java_classes.asp
BillWagner. (2024, April 9). Tips for Java Developers - A tour of C#. Microsoft Learn. https://learn.microsoft.com/en-us/dotnet/csharp/tour-of-csharp/tips-for-java-developers
ภาษา Python
nikhilaggarwal3. (2024, September 9). Python classes and objects. GeeksforGeeks. https://www.geeksforgeeks.org/python-classes-and-objects/
Timilehin, O. (2023, January 19). Want to explore the OOP World of Java and Python? Read This. Linkedin. https://www.linkedin.com/pulse/want-explore-oop-world-java-python-read-olowookere-timilehin
MKS075. (2023, May 8). Difference between Python and C#. GeeksforGeeks. https://www.geeksforgeeks.org/difference-between-python-and-c-sharp/
Last updated