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

คุณสมบัติเต็มรูปแบบพร้อมฟิลด์สำรอง

เพิ่มตรรกะให้ตัวอ่านค่าและตัวกำหนดค่า

คุณสมบัติเต็มรูปแบบพร้อมฟิลด์สำรอง เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

ก้าวไปไกลกว่าพร็อพเพอร์ตีที่สร้างอัตโนมัติ

เมื่อคุณต้องการใส่ตรรกะไว้ภายใน get หรือ set คุณจะเขียนพร็อพเพอร์ตีแบบเต็มพร้อม ฟิลด์สำรองที่ระบุอย่างชัดเจน ฟิลด์จะจัดเก็บข้อมูล ส่วนตัวเข้าถึงจะควบคุมการเข้าถึง

using System;

class Temperature
{
    private double _celsius;

    public double Celsius
    {
        get { return _celsius; }
        set { _celsius = value; }
    }
}

class Program
{
    static void Main()
    {
        var t = new Temperature();
        t.Celsius = 21.5;
        Console.WriteLine(t.Celsius);
    }
}

รูปแบบการตั้งชื่อฟิลด์สำรอง

ตามรูปแบบที่ใช้กันทั่วไป ฟิลด์สำรองจะเป็น private และตั้งชื่อโดยมีขีดล่างนำหน้า เช่น _name พร็อพเพอร์ตีสาธารณะจะเปิดเผยฟิลด์นี้

using System;

class Person
{
    private string _name;

    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }
}

class Program
{
    static void Main()
    {
        var p = new Person();
        p.Name = "Grace";
        Console.WriteLine(p.Name);
    }
}

คีย์เวิร์ดสำหรับค่าที่กำหนด

ภายในตัวเข้าถึง set พารามิเตอร์โดยนัย value จะเก็บค่าที่กำหนดเข้ามา คุณสามารถเลือกได้ว่าจะจัดการกับค่านั้นอย่างไร

using System;

class Box
{
    private int _size;

    public int Size
    {
        get { return _size; }
        set { _size = value * 2; }
    }
}

class Program
{
    static void Main()
    {
        var box = new Box();
        box.Size = 10;
        Console.WriteLine("Stored size: " + box.Size);
    }
}

การตรวจสอบในตัวกำหนดค่า

การใช้งานทั่วไปของพร็อพเพอร์ตีแบบเต็มคือการตรวจสอบข้อมูลขาเข้าก่อนจัดเก็บ และส่งข้อผิดพลาดหากค่าไม่ถูกต้อง

using System;

class Account
{
    private decimal _balance;

    public decimal Balance
    {
        get { return _balance; }
        set
        {
            if (value < 0)
                throw new ArgumentException("Balance cannot be negative");
            _balance = value;
        }
    }
}

class Program
{
    static void Main()
    {
        var a = new Account();
        a.Balance = 500m;
        Console.WriteLine("Balance: " + a.Balance);
    }
}

พร็อพเพอร์ตีแบบคำนวณค่า (อ่านได้อย่างเดียว)

พร็อพเพอร์ตีที่มีเฉพาะ get สามารถคำนวณค่าจากฟิลด์อื่นได้ เนื่องจากไม่มีการจัดเก็บข้อมูล จึงไม่จำเป็นต้องมีฟิลด์สำรอง

using System;

class Rectangle
{
    private double _width;
    private double _height;

    public Rectangle(double w, double h)
    {
        _width = w;
        _height = h;
    }

    public double Area
    {
        get { return _width * _height; }
    }
}

class Program
{
    static void Main()
    {
        var r = new Rectangle(4, 5);
        Console.WriteLine("Area: " + r.Area);
    }
}

ผลข้างเคียงในตัวกำหนดค่า

ตัวกำหนดค่าสามารถทำได้มากกว่าการจัดเก็บข้อมูล เช่น ปรับข้อมูลขาเข้าให้เป็นรูปแบบมาตรฐาน อัปเดตสถานะที่เกี่ยวข้อง หรือบันทึกการเปลี่ยนแปลง

using System;

class User
{
    private string _email;

    public string Email
    {
        get { return _email; }
        set { _email = value.Trim().ToLower(); }
    }
}

class Program
{
    static void Main()
    {
        var u = new User();
        u.Email = "  Hello@Example.COM  ";
        Console.WriteLine("Normalized: " + u.Email);
    }
}

การคำนวณแบบขี้เกียจในตัวอ่านค่า

ตัวอ่านค่าสามารถแคชผลลัพธ์ที่ใช้เวลาคำนวณมากไว้ในฟิลด์สำรอง เมื่อมีการร้องขอครั้งแรก

using System;

class Report
{
    private string _cached;

    public string Content
    {
        get
        {
            if (_cached == null)
                _cached = "Generated at runtime";
            return _cached;
        }
    }
}

class Program
{
    static void Main()
    {
        var r = new Report();
        Console.WriteLine(r.Content);
        Console.WriteLine(r.Content);
    }
}

การป้องกันสถานะที่ไม่ถูกต้อง

ผสานฟิลด์สำรองเข้ากับตรรกะเพื่อรักษาให้ออบเจ็กต์ถูกต้องอยู่เสมอ ในที่นี้ตัวกำหนดค่าจะจำกัดค่าให้อยู่ภายในช่วงที่กำหนด

using System;

class Volume
{
    private int _level;

    public int Level
    {
        get { return _level; }
        set
        {
            if (value < 0) _level = 0;
            else if (value > 100) _level = 100;
            else _level = value;
        }
    }
}

class Program
{
    static void Main()
    {
        var v = new Volume();
        v.Level = 150;
        Console.WriteLine("Clamped: " + v.Level);
    }
}

การผสานข้อมูลที่จัดเก็บกับข้อมูลที่คำนวณ

คลาสมักผสมพร็อพเพอร์ตีที่จัดเก็บข้อมูล (พร้อมฟิลด์สำรอง) กับพร็อพเพอร์ตีอ่านได้อย่างเดียวที่คำนวณจากข้อมูลเหล่านั้น

using System;

class Employee
{
    private string _first;
    private string _last;

    public string First { get { return _first; } set { _first = value; } }
    public string Last { get { return _last; } set { _last = value; } }
    public string FullName { get { return _first + " " + _last; } }
}

class Program
{
    static void Main()
    {
        var e = new Employee { First = "Marie", Last = "Curie" };
        Console.WriteLine(e.FullName);
    }
}

การแจ้งเตือนการเปลี่ยนแปลง

ตัวกำหนดค่าเป็นตำแหน่งที่เหมาะสมในการแจ้งเตือนเมื่อข้อมูลเปลี่ยนแปลง ซึ่งเป็นรูปแบบที่ใช้กันมากในเฟรมเวิร์กส่วนติดต่อผู้ใช้

using System;

class Model
{
    private int _count;

    public int Count
    {
        get { return _count; }
        set
        {
            if (_count != value)
            {
                _count = value;
                Console.WriteLine("Count changed to " + _count);
            }
        }
    }
}

class Program
{
    static void Main()
    {
        var m = new Model();
        m.Count = 1;
        m.Count = 1;
        m.Count = 2;
    }
}

การประกอบทุกอย่างเข้าด้วยกัน

พร็อพเพอร์ตีแบบเต็มช่วยให้คลาสบังคับใช้เงื่อนไขความถูกต้องและเปิดเผยข้อมูลที่คำนวณได้ ทั้งหมดนี้อยู่เบื้องหลังส่วนติดต่อที่สะอาดและมีลักษณะเหมือนฟิลด์

using System;

class Thermostat
{
    private double _target;

    public double Target
    {
        get { return _target; }
        set { _target = value < 10 ? 10 : value; }
    }

    public string Status { get { return _target >= 22 ? "Warm" : "Cool"; } }
}

class Program
{
    static void Main()
    {
        var th = new Thermostat();
        th.Target = 5;
        Console.WriteLine(th.Target + " -> " + th.Status);
        th.Target = 24;
        Console.WriteLine(th.Target + " -> " + th.Status);
    }
}

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจของคุณเกี่ยวกับพร็อพเพอร์ตีแบบเต็ม

สรุปทบทวน

พร็อพเพอร์ตีแบบเต็มจับคู่ฟิลด์สำรองแบบส่วนตัวกับตัวเข้าถึง get/set ที่ระบุอย่างชัดเจน คุณจึงสามารถเพิ่มการตรวจสอบ การปรับรูปแบบให้เป็นมาตรฐาน การแคช หรือการแจ้งเตือนการเปลี่ยนแปลงได้ พร็อพเพอร์ตีอ่านได้อย่างเดียวแบบคำนวณค่าจะมีเฉพาะตัวอ่านค่าและไม่มีฟิลด์สำรอง คีย์เวิร์ด value จะเก็บค่าที่กำหนดเข้ามาในตัวกำหนดค่า

using System;

class Demo
{
    private int _n;
    public int N
    {
        get { return _n; }
        set { _n = value < 0 ? 0 : value; }
    }
    public int Doubled { get { return _n * 2; } }
}

class Program
{
    static void Main()
    {
        var d = new Demo();
        d.N = -5;
        Console.WriteLine(d.N + ", " + d.Doubled);
    }
}

คำถามที่พบบ่อย

บทเรียน “คุณสมบัติเต็มรูปแบบพร้อมฟิลด์สำรอง” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “คุณสมบัติเต็มรูปแบบพร้อมฟิลด์สำรอง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “คุณสมบัติเต็มรูปแบบพร้อมฟิลด์สำรอง”

เพิ่มตรรกะให้ตัวอ่านค่าและตัวกำหนดค่า คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “คุณสมบัติเต็มรูปแบบพร้อมฟิลด์สำรอง” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม

ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. คุณสมบัติที่สร้างตัวเข้าถึงอัตโนมัติ
  2. คุณสมบัติเต็มรูปแบบพร้อมฟิลด์สำรอง
  3. สมาชิกแบบมีนิพจน์เป็นตัวลำตัว
  4. ตัวทำดัชนี
← กลับไปที่ C# Academy