Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

Static Constructor vs Instance Constructor ใน C#: ความแตกต่าง

C# มี Constructor 2 ประเภทหลัก: Static Constructor และ Instance Constructor มีวัตถุประสงค์และเวลาทำงานที่ต่างกัน

Static Constructor

  • ประกาศด้วยคีย์เวิร์ด static
  • รัน ครั้งเดียว ในวงจรชีวิตของคลาส (ก่อนเข้าถึง Static Member แรกครั้ง)
  • ใช้สำหรับ Initialize Static Fields / Static Data
  • ไม่มี Access Modifier, ไม่มี Parameter, ไม่สามารถ Overload ได้
  • ไม่สามารถเรียกโดยตรงได้

Instance Constructor

  • Constructor ปกติ (ไม่มี static)
  • รันทุกครั้งที่สร้าง Object ใหม่ (new ClassName())
  • ใช้สำหรับ Initialize Instance Fields (ข้อมูลของแต่ละ Object)
  • สามารถ Overload ได้ หลายรูปแบบ Parameter
  • สามารถมี Access Modifier (public, private, etc.)

ตัวอย่างเปรียบเทียบ

using System;

namespace Difference
{
    class Demo
    {
        static int staticVal;   // Static field
        int instanceVal;        // Instance field
        
        // Static Constructor - รันครั้งเดียว
        static Demo()
        {
            Console.WriteLine("Static Constructor เรียกแล้ว");
            staticVal = 70;
        }
        
        // Instance Constructor - รันทุกครั้งที่ new
        public Demo(int val)
        {
            Console.WriteLine("Instance Constructor เรียกแล้ว");
            instanceVal = val;
        }
        
        public void Show()
        {
            Console.WriteLine($"Static Val = {staticVal}, Instance Val = {instanceVal}");
        }
        
        static void Main()
        {
            Demo d1 = new Demo(110); // Static + Instance
            Demo d2 = new Demo(200); // Instance เท่านั้น
            
            d1.Show(); // Static Val = 70, Instance Val = 110
            d2.Show(); // Static Val = 70, Instance Val = 200
        }
    }
}

ผลลัพธ์

Static Constructor เรียกแล้ว
Instance Constructor เรียกแล้ว
Instance Constructor เรียกแล้ว
Static Val = 70, Instance Val = 110
Static Val = 70, Instance Val = 200

สรุปความแตกต่าง

คุณสมบัติStatic ConstructorInstance Constructor
คีย์เวิร์ดstatic(ไม่มี)
รันกี่ครั้งครั้งเดียวต่อ AppDomainทุกครั้งที่ new Object
Parameterไม่มีมีได้
Overloadไม่ได้ได้
InitializeStatic FieldsInstance Fields
เข้าถึง thisไม่ได้ได้