C# Academy · บทเรียน

การใช้ร่วมกับคุณสมบัติและชนิดฐาน

ส่งต่อพารามิเตอร์ไปยังชนิดฐานและคุณสมบัติ

บทเรียน 4 จาก 413 ขั้นตอน

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

การใช้ตัวสร้างหลักร่วมกับการสืบทอด

คลาสที่สืบทอดซึ่งมีตัวสร้างหลักสามารถส่งต่อพารามิเตอร์ไปยังคลาส base ได้โดยใช้ไวยากรณ์ : Base(args) ในส่วนหัว

using System;

class Animal(string name) {
    public string Name => name;
}

class Dog(string name) : Animal(name) {
    public string Speak() => Name + " says Woof";
}

Console.WriteLine(new Dog("Rex").Speak()); // Rex says Woof

การส่งต่อพารามิเตอร์เพียงบางส่วน

คลาสที่สืบทอดสามารถรับพารามิเตอร์มากกว่าคลาส base และส่งต่อเฉพาะพารามิเตอร์ที่เกี่ยวข้องขึ้นไปได้

using System;

class Shape(string color) {
    public string Color => color;
}

class Box(string color, int size) : Shape(color) {
    public int Size => size;
}

var b = new Box("red", 5);
Console.WriteLine(b.Color + " " + b.Size); // red 5

การแปลงอาร์กิวเมนต์ไปยังคลาส base

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

using System;

class Label(string text) {
    public string Text => text;
}

class UpperLabel(string text) : Label(text.ToUpper()) {
}

Console.WriteLine(new UpperLabel("hi").Text); // HI

การเพิ่มพร็อพเพอร์ตีควบคู่กัน

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

using System;

class Product(string name, decimal price) {
    public string Name { get; } = name;
    public decimal Price { get; set; } = price;
}

var p = new Product("Book", 12m);
p.Price = 10m;
Console.WriteLine(p.Name + " " + p.Price); // Book 10

พารามิเตอร์ของ base และการใช้งานในคลาสที่สืบทอด

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

using System;

class Base(int id) {
    public int Id => id;
}

class Item(int id, string label) : Base(id) {
    public string Describe() => "#" + id + ": " + label;
}

Console.WriteLine(new Item(7, "Widget").Describe()); // #7: Widget

เรคคอร์ดและตัวสร้างหลัก

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

using System;

record Person(string First, string Last) {
    public string Full => First + " " + Last;
}

Console.WriteLine(new Person("Ada", "Lovelace").Full); // Ada Lovelace

การสืบทอดเรคคอร์ด

เรคคอร์ดที่สืบทอดจะส่งต่อค่าไปยังเรคคอร์ด base ตามลำดับตำแหน่ง และสร้างชุดพร็อพเพอร์ตีที่รวมกัน

using System;

record Vehicle(string Make);
record Car(string Make, int Doors) : Vehicle(Make);

var c = new Car("Toyota", 4);
Console.WriteLine(c.Make + " " + c.Doors); // Toyota 4

การตรวจสอบค่าก่อนเรียก base

หากต้องตรวจสอบค่า ให้ดำเนินการในตัวเริ่มต้นของพร็อพเพอร์ตีโดยใช้นิพจน์โยนข้อผิดพลาด ทั้งนี้การเรียก base ยังคงทำงานก่อน

using System;

class Base(string tag) { public string Tag => tag; }

class Node(string tag) : Base(tag) {
    public string Tag2 { get; } =
        tag.Length > 0 ? tag : throw new ArgumentException("empty");
}

Console.WriteLine(new Node("a").Tag); // a

การผสมพารามิเตอร์ที่จับไว้กับพร็อพเพอร์ตี

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

using System;

class Order(int id, decimal total) {
    public decimal Total { get; } = total; // public
    public string Reference() => "ORD-" + id;   // id stays private
}

var o = new Order(42, 99m);
Console.WriteLine(o.Reference() + " " + o.Total); // ORD-42 99

ค่าเริ่มต้นของพร็อพเพอร์ตี

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

using System;

class Session(string user) {
    public string User { get; } = user;
    public bool Active { get; set; } = true;
}

var s = new Session("kai");
Console.WriteLine(s.User + " " + s.Active); // kai True

นำทุกอย่างมาประกอบกัน

คลาสที่สืบทอดซึ่งส่งต่อค่าไปยัง base เพิ่มพร็อพเพอร์ตีหนึ่งรายการ และเปิดเผยสมาชิกที่คำนวณค่า

using System;

class Employee(string name) {
    public string Name => name;
}

class Manager(string name, int teamSize) : Employee(name) {
    public int TeamSize { get; } = teamSize;
    public string Title => Name + " (manages " + TeamSize + ")";
}

Console.WriteLine(new Manager("Sam", 5).Title); // Sam (manages 5)

ตรวจสอบอย่างรวดเร็ว

ยืนยันว่าตัวสร้างหลักส่งต่อค่าไปยังคลาส base อย่างไร

สรุปทบทวน

คุณได้เรียนรู้การใช้ตัวสร้างหลักร่วมกับพร็อพเพอร์ตีและคลาส base

  • class D(...) : Base(args) จะส่งต่อค่าไปยัง base
  • อาร์กิวเมนต์ของ base สามารถคำนวณได้โดยตรงในส่วนหัว
  • สามารถเริ่มต้นพร็อพเพอร์ตีจากพารามิเตอร์ตั้งแต่ตอนประกาศ
  • เรคคอร์ดจะสร้างพร็อพเพอร์ตีสาธารณะที่เริ่มต้นได้เท่านั้นจากพารามิเตอร์แบบกำหนดตำแหน่ง
เริ่มต้นได้ฟรี

เรียนรู้ C# ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
93
บทเรียน
346

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

บทเรียน “การใช้ร่วมกับคุณสมบัติและชนิดฐาน” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การใช้ร่วมกับคุณสมบัติและชนิดฐาน”

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

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

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

บทเรียน “การใช้ร่วมกับคุณสมบัติและชนิดฐาน” ใช้เวลานานแค่ไหน

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

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

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

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

  1. คอนสตรักเตอร์หลักในคลาส
  2. การจับพารามิเตอร์ในสมาชิก
  3. คอนสตรักเตอร์หลักกับโครงสร้าง
  4. การใช้ร่วมกับคุณสมบัติและชนิดฐาน
← กลับไปที่ C# Academy