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

Static Members ของ C# Class คืออะไร

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 TypeExampleNote
Static Fieldstatic int Count;Shared State
Static Propertystatic int InstanceCount { get; }Computed/Shared
Static Methodstatic void Reset()No 'this'
Static Constructorstatic MyClass() { }Run Once, No Params
Static Eventstatic 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