เมธอดและฟิลด์แบบสแตติก
กำหนดสมาชิกที่เป็นของชนิดข้อมูลเอง
เมธอดและฟิลด์แบบสแตติก เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน
สแตติกเทียบกับอินสแตนซ์
สมาชิกอินสแตนซ์เป็นของออบเจ็กต์แต่ละตัว ส่วนสมาชิกสแตติกเป็นของคลาสเอง สมาชิกสแตติกมีสำเนาเดียวและทุกออบเจ็กต์ใช้ร่วมกัน
using System;
class Counter
{
public static int Total; // shared
public int Id; // per instance
}
class Program
{
static void Main()
{
Counter.Total = 5;
Console.WriteLine("Shared Total: " + Counter.Total);
}
}การประกาศฟิลด์สแตติก
ฟิลด์ static เข้าถึงผ่านชื่อคลาส ไม่ใช่ผ่านอินสแตนซ์: ClassName.Field
using System;
class Bank
{
public static decimal InterestRate = 0.05m;
}
class Program
{
static void Main()
{
Console.WriteLine("Rate: " + Bank.InterestRate);
}
}เมธอดสแตติก
เมธอด static ทำงานได้โดยไม่ต้องมีอินสแตนซ์ คุณเรียกใช้เมธอดนี้ผ่านคลาส เมธอดนี้ไม่สามารถใช้ฟิลด์อินสแตนซ์ได้ เพราะไม่มี this
using System;
class MathUtil
{
public static int Square(int x)
{
return x * x;
}
}
class Program
{
static void Main()
{
Console.WriteLine(MathUtil.Square(7));
}
}สถานะที่ใช้ร่วมกันระหว่างอินสแตนซ์
เนื่องจากฟิลด์สแตติกมีสำเนาเดียว อินสแตนซ์ทุกตัวจึงมองเห็นค่าเดียวกัน วิธีนี้มีประโยชน์สำหรับตัวนับและการกำหนดค่าที่ใช้ร่วมกัน
using System;
class Robot
{
public static int Count;
public Robot()
{
Count++;
}
}
class Program
{
static void Main()
{
new Robot();
new Robot();
new Robot();
Console.WriteLine("Robots created: " + Robot.Count);
}
}เมธอดสแตติกใช้ข้อมูลอินสแตนซ์ไม่ได้
เมธอดสแตติกไม่มี this จึงใช้ได้เฉพาะพารามิเตอร์ ตัวแปรเฉพาะที่ และสมาชิกสแตติกอื่น ๆ
using System;
class Calculator
{
public static int Add(int a, int b) => a + b;
public static int Multiply(int a, int b) => a * b;
}
class Program
{
static void Main()
{
Console.WriteLine(Calculator.Add(2, 3));
Console.WriteLine(Calculator.Multiply(4, 5));
}
}การผสมสแตติกกับอินสแตนซ์
คลาสหนึ่งสามารถมีสมาชิกทั้งสองชนิดได้ เมธอดอินสแตนซ์สามารถอ่านสมาชิกสแตติกได้ แต่เมธอดสแตติกไม่สามารถอ่านสมาชิกอินสแตนซ์ได้
using System;
class Account
{
public static decimal Fee = 2m;
public decimal Balance;
public decimal NetBalance()
{
return Balance - Fee; // instance method can read static
}
}
class Program
{
static void Main()
{
var a = new Account { Balance = 100m };
Console.WriteLine("Net: " + a.NetBalance());
}
}รูปแบบตัวนับสแตติก
การกำหนดรหัสให้แก่ออบเจ็กต์ใหม่แต่ละตัวโดยใช้ตัวนับสแตติก เป็นกรณีใช้งานคลาสสิกของฟิลด์สแตติก
using System;
class Ticket
{
private static int _next = 1;
public int Number;
public Ticket()
{
Number = _next++;
}
}
class Program
{
static void Main()
{
Console.WriteLine(new Ticket().Number);
Console.WriteLine(new Ticket().Number);
Console.WriteLine(new Ticket().Number);
}
}เมธอดช่วยเหลือแบบสแตติก
เมธอดสแตติกเหมาะอย่างยิ่งกับการดำเนินการที่ไม่มี state และขึ้นอยู่กับอินพุตของเมธอดเท่านั้น เช่น เครื่องมือจัดรูปแบบและตัวแปลง
using System;
class Format
{
public static string Money(decimal amount)
{
return "$" + amount.ToString("0.00");
}
}
class Program
{
static void Main()
{
Console.WriteLine(Format.Money(12.5m));
}
}การเรียกเมธอดสแตติกจากเมธอดสแตติก
เมธอดสแตติกสามารถเรียกใช้เมธอดสแตติกอื่นในคลาสเดียวกันได้โดยตรง โดยไม่ต้องมีอินสแตนซ์
using System;
class Geometry
{
public static double CircleArea(double r) => Math.PI * Square(r);
private static double Square(double x) => x * x;
}
class Program
{
static void Main()
{
Console.WriteLine(Geometry.CircleArea(2).ToString("0.00"));
}
}ฟิลด์สแตติกคงอยู่
ฟิลด์สแตติกจะเก็บค่าไว้ตลอดอายุการทำงานของโปรแกรม ไม่ใช่เพียงตลอดอายุของออบเจ็กต์ตัวเดียว ใช้ฟิลด์ลักษณะนี้กับแคชหรือผลรวมสะสม
using System;
class Logger
{
public static int MessageCount;
public static void Log(string msg)
{
MessageCount++;
Console.WriteLine("[" + MessageCount + "] " + msg);
}
}
class Program
{
static void Main()
{
Logger.Log("start");
Logger.Log("working");
Logger.Log("done");
}
}นำทุกอย่างมารวมกัน
สมาชิกสแตติกใช้จำลองแนวคิดที่มีผลทั่วทั้งคลาส เช่น อัตราที่ใช้ร่วมกัน ตัวนับ และเมธอดช่วยเหลือที่ไม่มี state ส่วนสมาชิกอินสแตนซ์ใช้เก็บข้อมูลเฉพาะของออบเจ็กต์แต่ละตัว
using System;
class Order
{
public static decimal TaxRate = 0.10m;
public decimal Subtotal;
public decimal Total() => Subtotal + Subtotal * TaxRate;
}
class Program
{
static void Main()
{
var o = new Order { Subtotal = 200m };
Console.WriteLine("Total: " + o.Total());
}
}ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจเกี่ยวกับสมาชิกสแตติก
ทบทวน
สมาชิกสแตติกเป็นของคลาสและมีสำเนาเดียวที่ใช้ร่วมกัน ส่วนสมาชิกอินสแตนซ์เป็นของออบเจ็กต์แต่ละตัว เมธอดสแตติกไม่มี this และแตะต้องข้อมูลอินสแตนซ์ไม่ได้ แต่โค้ดของอินสแตนซ์สามารถอ่านสมาชิกสแตติกได้ ใช้สแตติกกับตัวนับ การกำหนดค่าที่ใช้ร่วมกัน และเมธอดช่วยเหลือที่ไม่มี state
using System;
class Demo
{
public static int Shared;
public int Own;
public static void Bump() => Shared++;
}
class Program
{
static void Main()
{
Demo.Bump();
Demo.Bump();
Console.WriteLine(Demo.Shared);
}
}คำถามที่พบบ่อย
บทเรียน “เมธอดและฟิลด์แบบสแตติก” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “เมธอดและฟิลด์แบบสแตติก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “เมธอดและฟิลด์แบบสแตติก”
กำหนดสมาชิกที่เป็นของชนิดข้อมูลเอง คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “เมธอดและฟิลด์แบบสแตติก” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม
ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เมธอดและฟิลด์แบบสแตติก
- คลาสแบบสแตติกสำหรับยูทิลิตี
- ค่าคงที่และฟิลด์ readonly
- การออกแบบแบบสแตติกกับแบบอินสแตนซ์