คุณสมบัติเต็มรูปแบบพร้อมฟิลด์สำรอง
เพิ่มตรรกะให้ตัวอ่านค่าและตัวกำหนดค่า
คุณสมบัติเต็มรูปแบบพร้อมฟิลด์สำรอง เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- คุณสมบัติที่สร้างตัวเข้าถึงอัตโนมัติ
- คุณสมบัติเต็มรูปแบบพร้อมฟิลด์สำรอง
- สมาชิกแบบมีนิพจน์เป็นตัวลำตัว
- ตัวทำดัชนี