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 Constructor | Instance Constructor |
|---|---|---|
| คีย์เวิร์ด | static | (ไม่มี) |
| รันกี่ครั้ง | ครั้งเดียวต่อ AppDomain | ทุกครั้งที่ new Object |
| Parameter | ไม่มี | มีได้ |
| Overload | ไม่ได้ | ได้ |
| Initialize | Static Fields | Instance Fields |
| เข้าถึง this | ไม่ได้ | ได้ |