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

คอนสตรักเตอร์หลักกับโครงสร้าง

ใช้คอนสตรักเตอร์หลักกับชนิดค่า

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

ตัวสร้างหลักบนโครงสร้าง

โครงสร้างก็รองรับตัวสร้างหลักเช่นกัน: struct Point(int x, int y) โดยทำงานคล้ายกับที่ใช้ในคลาส และประกาศพารามิเตอร์ไว้ในส่วนหัว

using System;

struct 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;

struct Vec(int x, int y) {
    public int X => x;
    public int Y => y;
}

var zero = new Vec(); // default: x=0, y=0
Console.WriteLine(zero.X + "," + zero.Y); // 0,0

เปิดเผยพารามิเตอร์ผ่านพร็อพเพอร์ตี

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

using System;

struct Size(int w, int h) {
    public int Width { get; } = w;
    public int Height { get; } = h;
}

var s = new Size(10, 20);
Console.WriteLine(s.Width * s.Height); // 200

สมาชิกที่คำนวณค่า

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

using System;

struct Complex(double re, double im) {
    public double Magnitude => Math.Sqrt(re * re + im * im);
}

Console.WriteLine(new Complex(3, 4).Magnitude); // 5

โครงสร้างแบบอ่านอย่างเดียว

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

using System;

readonly struct Money(decimal amount, string currency) {
    public decimal Amount { get; } = amount;
    public string Currency { get; } = currency;
    public string Display => Amount.ToString("0.00") + " " + Currency;
}

Console.WriteLine(new Money(5m, "USD").Display); // 5.00 USD

เชื่อมโยงไปยังตัวสร้างหลัก

ตัวสร้างเพิ่มเติมของโครงสร้างต้องเรียกใช้ตัวสร้างหลักด้วย : this(...) เช่นเดียวกับคลาส

using System;

struct Square(int side) {
    public int Side => side;
    public int Area => side * side;
    public Square() : this(1) { } // explicit default side
}

Console.WriteLine(new Square(4).Area); // 16

ตัวสร้างเริ่มต้นเทียบกับตัวสร้างหลัก

โปรดสังเกตว่า new Square() สามารถใช้ได้ทั้งการเริ่มต้นด้วยศูนย์โดยปริยาย หรือตัวสร้างที่ไม่มีพารามิเตอร์ซึ่งคุณประกาศไว้ หากคุณกำหนดตัวสร้างที่เชื่อมโยงไปยังตัวสร้างอื่น ตัวสร้างนั้นจะเรียกใช้ตรรกะของคุณ

using System;

struct Pct(double value) {
    public double Value { get; } = value;
    public Pct() : this(100) { }
}

Console.WriteLine(new Pct().Value); // 100

ความหมายแบบค่าที่ยังคงอยู่

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

using System;

struct Counter(int n) {
    public int N { get; set; } = n;
}

var a = new Counter(1);
var b = a;       // copy
b.N = 99;
Console.WriteLine(a.N + " " + b.N); // 1 99

การเริ่มต้นฟิลด์ที่เปลี่ยนแปลงได้

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

using System;

struct Bag(int capacity) {
    public int Capacity { get; set; } = capacity;
    public int Used { get; set; } = 0;
}

var bag = new Bag(10);
bag.Used = 3;
Console.WriteLine(bag.Capacity - bag.Used); // 7

การแยกส่วนประกอบ

จับคู่ตัวสร้างหลักกับเมธอด Deconstruct เพื่อให้สามารถแยกค่าออกในลักษณะคล้ายทูเพิลได้

using System;

struct Point(int x, int y) {
    public int X => x;
    public int Y => y;
    public void Deconstruct(out int a, out int b) { a = x; b = y; }
}

var (px, py) = new Point(7, 8);
Console.WriteLine(px + "," + py); // 7,8

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

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

using System;

readonly struct Temperature(double celsius) {
    public double Celsius { get; } = celsius;
    public double Fahrenheit => Celsius * 9 / 5 + 32;
}

var t = new Temperature(25);
Console.WriteLine(t.Fahrenheit); // 77

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

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

สรุปทบทวน

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

  • struct P(int x, int y) ประกาศพารามิเตอร์ไว้ในส่วนหัว
  • ตัวสร้างที่ไม่มีพารามิเตอร์โดยปริยายยังคงมีอยู่
  • ใช้ร่วมกับ readonly struct เพื่อสร้างชนิดค่าที่ไม่เปลี่ยนแปลง
  • ตัวสร้างเพิ่มเติมจะเชื่อมโยงด้วย : this(...)

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

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

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

คุณจะเรียนรู้อะไรในบทเรียน “คอนสตรักเตอร์หลักกับโครงสร้าง”

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

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

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

บทเรียน “คอนสตรักเตอร์หลักกับโครงสร้าง” ใช้เวลานานแค่ไหน

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

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

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

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

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