Static Members (Fields, Properties, Methods, Events, Constructors) เป็นของ **Class** ไม่ใช่ Instance - มีเพียง 1 Copy ต่อ AppDomain
ลักษณะ
- Shared ระหว่างทุก Instances
- เข้าถึงผ่าน
ClassName.Member - มีอยู่ก่อน Instance ใดๆ ถูกสร้าง
- ใช้สำหรับ: Constants, Counters, Shared State, Factory Methods
ตัวอย่าง: Static Field แบ่งปัน
using System;
namespace StaticVarApplication
{
class StaticVar
{
public static int Num = 0; // Shared Field
public void Count() => Num++;
public int GetNum() => Num; // Instance Method อ่าน Static Field
}
class StaticTester
{
static void Main(string[] args)
{
StaticVar s1 = new StaticVar();
StaticVar s2 = new StaticVar();
s1.Count(); s1.Count(); s1.Count(); // Num = 3
s2.Count(); s2.Count(); s2.Count(); // Num = 6
// ทั้งคู่อ่านค่าเดียวกัน
Console.WriteLine("s1 Num: {0}", s1.GetNum()); // 6
Console.WriteLine("s2 Num: {0}", s2.GetNum()); // 6
Console.WriteLine("StaticVar.Num: {0}", StaticVar.Num); // 6
Console.ReadKey();
}
}
}
ผลลัพธ์
s1 Num: 6 s2 Num: 6 StaticVar.Num: 6
Static Members ทั้งหมด
| Member Type | Example | Note |
|---|---|---|
| Static Field | static int Count; | Shared State |
| Static Property | static int InstanceCount { get; } | Computed/Shared |
| Static Method | static void Reset() | No 'this' |
| Static Constructor | static MyClass() { } | Run Once, No Params |
| Static Event | static event Action OnChange; | Class-level Event |
Static Readonly vs Const
public static readonly DateTime StartTime = DateTime.Now; // Runtime public const double PI = 3.14159; // Compile-time Constant
Thread Safety
Static Fields ไม่ Thread-safe โดยอัตโนมัติ ใช้ lock, Interlocked, หรือ Concurrent Collections