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