Private Constructor

วรนพ ลิมป์ปีติวรกุล 650710579

Private Constructor (C#) คือ constructorแบบพิเศษที่ใช้ในคลาสที่มีสมาชิกเป็นแบบstaticเท่านั้น หากคลาสมี private constructor และไม่มี public constructor คลาสอื่นจะไม่สามารถสร้างinstanceของคลาสนี้ได้ ซึ่งหมายความว่าไม่สามารถสร้างวัตถุ(object)ของคลาสนี้ได้ และไม่สามารถสืบทอด(inherit)คลาสนี้ได้เช่นกัน

ความสามารถของ Private Constructor

  • ป้องกันการสร้างวัตถุใหม่จากภายนอกคลาส

  • ใช้สร้างคลาสที่มีเพียงinstanceเดียว เช่น Singleton Pattern และอื่นๆ

  • ใช้สำหรับโค้ดที่ต้องการควบคุมการสร้างวัตถุหรือจำกัดให้การสร้างเฉพาะภายในคลาสเท่านั้น

ตัวอย่าง

public class Example{
    // Private constructor
    private Example(){
        // Initialization code here
    }
}

ตัวอย่างการนำไปใช้งาน

using System;

class Singleton {
    private static Singleton instance;

    // Private constructor
    private Singleton(){
    }

    // Static methodเพื่อให้มีinstanceเดียว
    public static Singleton GetInstance(){
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
public class Program {
    public static void Main(string[] args){
        // เรียกใช้Singleton instance
        Singleton singleton1 = Singleton.GetInstance();
        Singleton singleton2 = Singleton.GetInstance();

        // แสดงผลการตรวจสอบว่าinstanceที่สร้างอ้างถึงobjectเดียวกันหรือไม่
        if (singleton1 == singleton2){
            Console.WriteLine("อ้างถึงSingleton instanceเดียวกัน");
        }
        else{
            Console.WriteLine("อ้างถึงSingleton instanceคนละตัว");
        }
    }
}

เปรียบเทียบกับภาษาอื่นๆ

class Example {
private:
    // Private constructor
    Example(){
        // Initialization code here
    }

public:
    // Static methodสำหรับสร้างinstance (ถ้าต้องใช้)
    static Example createInstance(){
        return Example();
    }
};

สรุป

C# ใช้ private ก่อนชื่อconstructorเพื่อป้องกันไม่ให้มีการสร้างinstanceจากภายนอกคลาส

C++ และ Java คล้ายกับ C# โดยใช้ private ในการกำหนดconstructor

Python ไม่มีแนวคิดของ private constructor แต่สามารถใช้การตั้งชื่อ (เช่น _init_) เพื่อบ่งบอกว่าควรใช้งานภายใน

Referance

ความสามารถ
ความสามารถ
คืออะไร , ความสามารถ
เปรียบเทียบกับC++
เปรียบเทียบกับJava
เปรียบเทียบกับPython

Presentation Silde

Video

Last updated