Static Keyword
Written By Kasidinthorn Phookang 650710525
ในภาษา C# คำว่า static ถูกใช้เพื่อกำหนดสมาชิกที่เป็นของประเภท (class) ไม่ใช่ของอินสแตนซ์ (instance) ของประเภทนั้น ซึ่งหมายความว่า สมาชิกที่ถูกประกาศเป็น static จะถูกแชร์ร่วมกันระหว่างทุก instance ของ class ไม่ใช่เป็นเอกลักษณ์เฉพาะสำหรับแต่ละ instance เมื่อสมาชิกถูกทำเครื่องหมายเป็น static สามารถเข้าถึงได้โดยไม่จำเป็นต้องสร้าง instance ของ class นั้น
1. Static Classes
ในภาษา C# คลาสสามารถถูกกำหนดว่าเป็น static ได้ ซึ่งหมายความว่าคลาสนั้นไม่สามารถสร้าง instance ได้ และสมาชิกทั้งหมดของมันต้องเป็น static และคลาส static ยังถูกปิด(sealed) จึงไม่สามารถใช้เป็น base class หรือมีสมาชิกที่เป็น instance ได้
สรุปความแตกต่าง Static Class ใน 4 ภาษา
C# - มี static class คลาสทั้งคลาสต้องเป็น static
Java - ไม่มี static class แต่สามารถใช้ static methods และ static nested classes แทนกันได้
C++ - ไม่มี static class แต่สามารถใช้ static members แทน static class ได้
Python - ไม่มี static class แต่ใช้ @staticmethod เพื่อสร้างฟังก์ชันที่ทำงานแบบ static ได้
2. Static Variables
ในภาษา C# ตัวแปรที่ถูกประกาศด้วยการใช้คำว่า static เมื่อมีการประกาศตัวแปรเป็น static จะมีการสร้างสำเนาของตัวแปรเพียงชุดเดียวและถูกแชร์ร่วมกันระหว่างทุกๆ instance ในระดับคลาส (class level) ตัวแปร static สามารถเข้าถึงได้โดยใช้ชื่อคลาส ไม่จำเป็นต้องสร้าง instance เพื่อเข้าถึง
สรุปความแตกต่าง Static Variables ใน 4 ภาษา
C# - Static Variables ถูกใช้สำหรับการกำหนดค่าคงที่ (constants) เนื่องจากค่าสามารถเรียกใช้งานได้โดยการอ้างอิงถึงคลาสโดยตรงโดยไม่จำเป็นต้องสร้างอินสแตนซ์ของคลาสนั้น ตัวแปร static สามารถกำหนดค่าเริ่มต้นได้ทั้งภายนอกฟังก์ชันสมาชิก และสามารถกำหนดค่าเริ่มต้นภายในคลาสได้เช่นกัน
Java - เมื่อ Variables ถูกประกาศเป็น static จะมีการสร้างสำเนาเพียงชุดเดียวของตัวแปรนั้น และถูกแชร์ระหว่าง Objects ทั้งหมดในระดับคลาส โดยตัวแปร static นั้นเปรียบเสมือนตัวแปร global ซึ่ง instance ทั้งหมดของคลาสจะแชร์ตัวแปร static เดียวกัน
C - Static Variables มีคุณสมบัติในการคงค่าของตัวเองแม้ว่าจะอยู่นอก scope การใช้งานแล้วก็ตาม ดังนั้น ตัวแปร static จะคงค่าเดิมจาก scope เดิมไว้ และจะไม่ถูกกำหนดค่าใหม่เมื่อกลับเข้าสู่ scope ใหม่
Python - Static Variables ถูกกำหนดภายในคลาส แต่ถ้าอยู่นอกฟังก์ชันจะถูกกำหนดค่าเริ่มต้นเหมือนกับ instance variable แต่สามารถเข้าถึงและแก้ไขได้ผ่านคลาสโดยตรง ไม่จำเป็นต้องผ่าน instance ของคลาส
3. Static Methods
ในภาษา C# Methods ที่สามารถเรียกใช้งานได้โดยไม่ต้องสร้าง instance ของคลาส Methods เหล่านี้สามารถเข้าถึงได้เฉพาะสมาชิกที่เป็น static ของคลาสเท่านั้น และไม่สามารถเข้าถึงสมาชิกที่ไม่ใช่ static (สมาชิกของ instance) ได้โดยตรง
สรุปความแตกต่าง Static Methods ใน 4 ภาษา
C# - คลาส static จะมีเฉพาะ Method แบบ static ดังนั้น static Method จะถูกประกาศโดยใช้คีย์เวิร์ด static Method เหล่านี้สามารถเข้าถึงได้เฉพาะตัวแปรข้อมูลแบบ static เท่านั้น และไม่สามารถเข้าถึงตัวแปรข้อมูลที่ไม่ใช่ static ได้
Java - Static method สามารถเข้าถึงได้เฉพาะข้อมูลที่เป็น static เท่านั้น ไม่สามารถเข้าถึงข้อมูลที่ไม่ใช่ static (instance variables) ได้ และ instance ทุกตัวของคลาสสามารถเข้าถึง static method ได้
C++ - จะใช้ Static Member Function แทน Static Methods สามารถเรียกได้แม้ว่าจะไม่มีวัตถุของคลาสอยู่ก็ตาม สามารถใช้ Static Member Function เพื่อกําหนดจํานวน object ของคลาสที่สร้างขึ้นได้
Python - Static method ในภาษา Python เป็น method ที่เป็นของคลาส ไม่ใช่ instance ของคลาสนั้น ไม่จำเป็นต้องใช้ instance ของคลาสในการเรียกใช้งาน และไม่สามารถเข้าถึง instance ได้ static method ใน Python ถูกประกาศได้โดยใช้ @staticmethod ซึ่งจะทำให้ Python รู้ว่าเมธอดนี้เป็น static และควรถูกเรียกใช้งานบนคลาส ไม่ใช่ instance ของคลาสนั้น
4. Static Constructor
ในภาษา C# Static constructor คือ คอนสตรัคเตอร์ที่ถูกเรียกโดยอัตโนมัติโดย runtime ก่อนที่สมาชิก static ใด ๆ ของคลาสจะถูกเข้าถึงหรือ Method static จะถูกเรียกใช้ มันถูกใช้สำหรับการทำงานของการตั้งค่าเริ่มต้น (initialization) ที่เฉพาะเจาะจงกับตัวประเภท (type) เอง ไม่ใช่กับ instance ใด ๆ ของประเภทนั้น
สรุปความแตกต่าง Static Constructor ใน 4 ภาษา
C# - Static constructor ถูกใช้เพื่อกำหนดค่าเริ่มต้นให้กับตัวแปร static และสามารถใช้สำหรับการดำเนินการที่ต้องทำเพียงครั้งเดียวเท่านั้น นอกจากนี้ static constructor จะถูกเรียกใช้งานโดยอัตโนมัติก่อนที่จะมีการสร้าง instance หรือก่อนที่จะมีการอ้างอิงสมาชิก static ใดๆ
Java - ใน Java ไม่มี static constructors โดยตรง แต่จะใช้ Static block สำหรับการกำหนดค่าเริ่มต้นให้กับคลาสแบบ static โค้ดที่เขียนภายใน static block จะถูกเรียกใช้งานเพียงครั้งเดียวเมื่อคลาสนั้นถูกโหลดเข้าสู่หน่วยความจำ
C++ - ใน C++ ไม่มี static constructors โดยตรง แต่เราสามารถใช้ static variables ในฟังก์ชันแทนได้
Python - ใน Python ไม่มี static constructors แต่สามารถใช้ class initialization แทน static constructor ได้
Link Video Presentation
Slides
References
-การใช้ static keyword ในภาษา C#
GeeksforGeeks. (2024, July 17). Static keyword in C#. GeeksforGeeks. https://www.geeksforgeeks.org/static-keyword-in-c-sharp/
-การใช้ Class และ static variables ในภาษา C#
Class and static variables in C#. (n.d.). https://www.tutorialspoint.com/class-and-static-variables-in-chash
-การใช้ static constructor ในภาษา C#
C# static constructor - javatpoint. (n.d.). www.javatpoint.com. https://www.javatpoint.com/c-sharp-static-constructor
-คุณสมบัติต่างๆของ static ในภาษา C#
Creator, F. S. C. (2023, May 19). Demystifying Static in C#: Understanding How it Works. Medium. https://medium.com/@javvadirupasri8/demystifying-static-in-c-understanding-how-it-works-d7b47a1acb32
-การใช้ static keyword ในภาษา java
Static keyword in Java - Javatpoint. (n.d.). www.javatpoint.com. https://www.javatpoint.com/static-keyword-in-java
-การใช้ static class ในภาษา java
GeeksforGeeks. (2023, November 9). Static class in Java. GeeksforGeeks. https://www.geeksforgeeks.org/static-class-in-java/
-การใช้ static method ในภาษา java
GeeksforGeeks. (2024b, August 21). Static method in Java with examples. GeeksforGeeks. https://www.geeksforgeeks.org/static-method-in-java-with-examples/
-การใช้ static variables ในภาษา C
GeeksforGeeks. (2024c, October 11). Static variables in C. GeeksforGeeks. https://www.geeksforgeeks.org/static-variables-in-c/
-การใช้ static constructor ในภาษา C++
What is a static constructor? (n.d.). Stack Overflow. https://stackoverflow.com/questions/5803953/what-is-a-static-constructor
-การใช้ static member function และ static method ในภาษา C++
GeeksforGeeks. (2022, December 20). Static Member Function in C++. GeeksforGeeks. https://www.geeksforgeeks.org/static-member-function-in-cpp/
-การใช้ Class or static variables ในภาษา Python
GeeksforGeeks. (2024c, September 30). Class or static variables in Python. GeeksforGeeks. https://www.geeksforgeeks.org/g-fact-34-class-or-static-variables-in-python/
-การใช้ static method ในภาษา Python
Python static method | DigitalOcean. (n.d.). https://www.digitalocean.com/community/tutorials/python-static-method
-การใช้ static constructor or static initializer ในภาษา Python
Is there a static constructor or static initializer in Python? (n.d.). Stack Overflow. https://stackoverflow.com/questions/7396092/is-there-a-static-constructor-or-static-initializer-in-python
Last updated