Static member คือ ฟิวด์ พร็อพเพอร์ตี้ หรือเมธอดซึ่งเป็นสมาชิกของคลาส ที่สามารถเข้าถึงหรือเรียกใช้งานโดยไม่ต้องสร้าง object ของคลาสขื้นมา
เมื่อใดที่จะใช้ Static Member
สมมติว่าเรามีสร้างเกมรถแข่ง ที่มี Car class เพื่อเป็นแม่แบบในการสร้างรถแต่ละคันในเกม
ตัวอย่าง Car class สร้าง GetTournmentName เมธอดเป็น instance member ต้อง new object ขึ้นมาจึงจะใช้งานเมธอดนี้ได้
namespace InstanceMember
{
class Car
{
public string GetTournamentName()
{
return "World Grand Prix";
}
}
}
นำไปใช้งาน
using System;
namespace InstanceMember
{
class Program
{
static void Main(string[] args)
{
Car car1 = new Car();
Console.WriteLine(car1.GetTournamentName());
}
void ElseWhere()
{
Car car2 = new Car();
Console.WriteLine(car2.GetTournamentName());
}
}
}
จะเห็นว่า เมื่อจะใช้งานเมธอด GetTournamentName เพื่อแสดงข้อความว่าขณะนี้เป็นการแข่งขันในรายการใด ออกสู่หน้าจอ
ต้องมีการสร้าง Car object ขึ้นมา และเมื่อต้องการทราบข้อมูลรายการแข่งขันในส่วนอื่นของโปรแกรม เช่นใน ElseWhere เมธอด ก็ต้องสร้าง Car object ขึ้นมาใหม่อีก ทำให้เกิดความไม่สะดวก ทั้งที่การเปลี่ยนแปลงค่าอื่นๆ เช่น พร็อพเพอร์ตี้ หรือ เมธอดของ Car object ก็ไม่มีผลกระทบต่อค่ารายการการแข่งขัน จึงเป็นการดีกว่า ถ้ามาทำค่านี้เป็น Static Member โดยการวาง static keyword ไว้หน้า return data type ของ GetTournmentName เมธอด ดังนี้
namespace StaticMember
{
class Car
{
public static string GetTournamentName()
{
return "World Grand Prix";
}
}
}
เมื่อนำไปใช้
using System;
namespace StaticMember
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Car.GetTournamentName());
}
void ElseWhere()
{
Console.WriteLine(Car.GetTournamentName());
}
}
}
จะเห็นว่าเมื่อแก้ไขเมธอด GetTournamentName เป็น static member ทำให้คำสั่งดูมีความเหมาะสมถูกต้องยิ่งขึ้น และยังลดคำสั่งที่ไม่จำเป็นในการสร้าง object ขึ้นมาใหม่ด้วย
download source code ตัวอย่าง