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

คอนสตรักเตอร์หลักในคลาส

ประกาศพารามิเตอร์คอนสตรักเตอร์ในส่วนหัวของชนิดข้อมูล

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

ตัวสร้างหลักคืออะไร

ตัวสร้างหลัก ช่วยให้คุณประกาศพารามิเตอร์ของตัวสร้างได้โดยตรงในส่วนหัวของคลาส เช่น class Point(int x, int y) โดยพารามิเตอร์จะอยู่ในขอบเขตตลอดทั้งเนื้อหาคลาส

using System;

class Point(int x, int y) {
    public int X => x;
    public int Y => y;
}

var p = new Point(3, 4);
Console.WriteLine(p.X + "," + p.Y); // 3,4

ไม่ต้องเขียนโค้ดซ้ำซ้อนอีกต่อไป

ก่อนมีตัวสร้างหลัก คุณต้องเขียนเนื้อหาตัวสร้างเพียงเพื่อคัดลอกพารามิเตอร์ลงในฟิลด์ แต่ตอนนี้ส่วนหัวจะประกาศพารามิเตอร์ และคุณอ้างอิงพารามิเตอร์เหล่านั้นได้โดยตรง

using System;

class Greeter(string name) {
    public string Greet() => "Hello, " + name + "!";
}

Console.WriteLine(new Greeter("Ada").Greet()); // Hello, Ada!

พารามิเตอร์อยู่ในขอบเขตทุกแห่ง

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

using System;

class Circle(double radius) {
    public double Area => Math.PI * radius * radius;
    public double Circumference => 2 * Math.PI * radius;
}

var c = new Circle(2);
Console.WriteLine(Math.Round(c.Area, 2)); // 12.57

การเริ่มต้นฟิลด์และพร็อพเพอร์ตี

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

using System;

class Account(decimal initial) {
    public decimal Balance { get; private set; } = initial;
    public void Deposit(decimal amount) => Balance += amount;
}

var a = new Account(100m);
a.Deposit(50m);
Console.WriteLine(a.Balance); // 150

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

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

using System;

class Person(string name) {
    public string Name { get; } =
        string.IsNullOrWhiteSpace(name)
            ? throw new ArgumentException("name required")
            : name;
}

Console.WriteLine(new Person("Lin").Name); // Lin

การเพิ่มตัวสร้างเพิ่มเติม

คลาสที่มีตัวสร้างหลักยังสามารถประกาศตัวสร้างเพิ่มเติมได้ แต่ตัวสร้างเหล่านั้นต้องเชื่อมโยงไปยังตัวสร้างหลักด้วย : this(...)

using System;

class Box(int width, int height) {
    public int Width => width;
    public int Height => height;
    public Box(int size) : this(size, size) { }
}

var sq = new Box(5);
Console.WriteLine(sq.Width + "x" + sq.Height); // 5x5

เนื้อหาของตัวสร้างหลัก

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

using System;

class Logger(string prefix) {
    private readonly string tag = "[" + prefix + "]";
    public void Log(string msg) => Console.WriteLine(tag + " " + msg);
}

new Logger("INFO").Log("started"); // [INFO] started

ไม่ได้สร้างพร็อพเพอร์ตีสาธารณะโดยอัตโนมัติ

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

using System;

class Temp(double celsius) {
    // celsius is NOT a public property here
    public double Fahrenheit => celsius * 9 / 5 + 32;
}

Console.WriteLine(new Temp(100).Fahrenheit); // 212

พารามิเตอร์ที่ถูกจับจะกลายเป็นฟิลด์

เมื่อมีการใช้พารามิเตอร์ของตัวสร้างหลักในเมธอด (ไม่ใช่แค่ในตัวเริ่มต้น) คอมไพเลอร์จะจับพารามิเตอร์นั้นไว้ในฟิลด์ที่ซ่อนอยู่ เพื่อให้ยังคงอยู่หลังการสร้างอินสแตนซ์

using System;

class Counter(int start) {
    private int value = start;
    public int Next() => value++;
}

var c = new Counter(10);
Console.WriteLine(c.Next()); // 10
Console.WriteLine(c.Next()); // 11

การฉีดการพึ่งพาที่สะอาดยิ่งขึ้น

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

using System;

interface IClock { string Now(); }
class FakeClock : IClock { public string Now() => "12:00"; }

class Service(IClock clock) {
    public string Report() => "Time is " + clock.Now();
}

Console.WriteLine(new Service(new FakeClock()).Report()); // Time is 12:00

นำทุกอย่างมารวมกัน

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

using System;

class Rectangle(double w, double h) {
    public double Area => w * h;
    public double Perimeter => 2 * (w + h);
}

var r = new Rectangle(3, 4);
Console.WriteLine(r.Area + " " + r.Perimeter); // 12 14

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจเกี่ยวกับตัวสร้างหลักในคลาสของคุณ

สรุปทบทวน

คุณได้เรียนรู้ตัวสร้างหลักในคลาส

  • class C(int x) ประกาศพารามิเตอร์ของตัวสร้างในส่วนหัว
  • พารามิเตอร์อยู่ในขอบเขตตลอดเนื้อหาคลาส
  • ตัวสร้างเพิ่มเติมเชื่อมโยงกันด้วย : this(...)
  • ในคลาสทั่วไป พารามิเตอร์เหล่านี้จะไม่กลายเป็นพร็อพเพอร์ตีสาธารณะโดยอัตโนมัติ

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

บทเรียน “คอนสตรักเตอร์หลักในคลาส” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “คอนสตรักเตอร์หลักในคลาส” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ 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. คอนสตรักเตอร์หลักกับโครงสร้าง
  4. การใช้ร่วมกับคุณสมบัติและชนิดฐาน
← กลับไปที่ C# Academy