0Pricing
C# Academy · บทเรียน

เมธอดและฟิลด์แบบสแตติก

กำหนดสมาชิกที่เป็นของชนิดข้อมูลเอง

เมธอดและฟิลด์แบบสแตติก เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เมธอดและฟิลด์แบบสแตติก
  2. คลาสแบบสแตติกสำหรับยูทิลิตี
  3. ค่าคงที่และฟิลด์ readonly
  4. การออกแบบแบบสแตติกกับแบบอินสแตนซ์
← กลับไปที่ C# Academy