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

ตัวกำหนดค่าแบบ init เท่านั้น

สร้างคุณสมบัติที่กำหนดค่าได้เฉพาะตอนเริ่มต้น

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

ตัวตั้งค่าที่ใช้ได้เฉพาะตอนเริ่มต้น

ตัวเข้าถึง init ช่วยให้กำหนดค่าพร็อพเพอร์ตีได้ระหว่างการสร้างออบเจ็กต์ รวมถึงในตัวเริ่มต้นออบเจ็กต์ แต่หลังจากนั้นจะอ่านค่าได้อย่างเดียว รูปแบบคือ { get; init; }

using System;

class Point {
    public int X { get; init; }
    public int Y { get; init; }
}

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

กำหนดค่าได้เฉพาะตอนเริ่มต้น

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

using System;

class Config {
    public string Name { get; init; }
}

var c = new Config { Name = "prod" };
// c.Name = "dev"; // compile error
Console.WriteLine(c.Name); // prod

ตัวเริ่มต้นออบเจ็กต์ยังคงใช้งานได้

ข้อได้เปรียบสำคัญเหนือพร็อพเพอร์ตีที่อ่านได้อย่างเดียว คือ init รองรับไวยากรณ์ตัวเริ่มต้นออบเจ็กต์ ดังนั้นคุณจึงไม่จำเป็นต้องสร้างตัวสร้างสำหรับทุกพร็อพเพอร์ตี

using System;

class Settings {
    public bool DarkMode { get; init; }
    public int FontSize { get; init; }
}

var s = new Settings { DarkMode = true, FontSize = 14 };
Console.WriteLine(s.DarkMode + " " + s.FontSize); // True 14

การใช้ร่วมกับตัวสร้าง

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

using System;

class User {
    public string Role { get; init; } = "guest";
    public User() { }
}

var u = new User { Role = "admin" };
Console.WriteLine(u.Role); // admin

ค่าเริ่มต้น

พร็อพเพอร์ตี init สามารถมีตัวเริ่มต้นเป็นค่าเริ่มต้น ซึ่งจะถูกใช้เว้นแต่จะมีการเขียนทับระหว่างการสร้างออบเจ็กต์

using System;

class Options {
    public int Retries { get; init; } = 3;
}

Console.WriteLine(new Options().Retries);            // 3
Console.WriteLine(new Options { Retries = 5 }.Retries); // 5

การเริ่มต้นเทียบกับการกำหนดค่า

ตัวเข้าถึง set อนุญาตให้เปลี่ยนค่าได้ทุกเวลา ส่วน init จะจำกัดการกำหนดค่าไว้เฉพาะช่วงการสร้างออบเจ็กต์ ให้เลือกใช้ init กับข้อมูลที่ต้องการให้ไม่เปลี่ยนแปลงหลังการสร้าง

using System;

class Mutable { public int V { get; set; } }
class Frozen  { public int V { get; init; } }

var m = new Mutable { V = 1 };
m.V = 2; // allowed
Console.WriteLine(m.V); // 2

การเริ่มต้นพร้อมการตรวจสอบค่า

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

using System;

class Percentage {
    private int _value;
    public int Value {
        get => _value;
        init => _value = (value < 0 || value > 100)
            ? throw new ArgumentOutOfRangeException()
            : value;
    }
}

Console.WriteLine(new Percentage { Value = 80 }.Value); // 80

การเริ่มต้นในเรคคอร์ด

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

using System;

record Account(string Id, decimal Balance);

var a = new Account("A1", 100m);
Console.WriteLine(a.Balance); // 100

ตัวเริ่มต้นออบเจ็กต์แบบซ้อน

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

using System;

class Address { public string City { get; init; } }
class Person { public string Name { get; init; } public Address Home { get; init; } }

var p = new Person { Name = "Lin", Home = new Address { City = "Oslo" } };
Console.WriteLine(p.Name + " / " + p.Home.City); // Lin / Oslo

การเริ่มต้นและการสืบทอด

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

using System;

class Base { public int Id { get; init; } }
class Item : Base { public string Name { get; init; } }

var i = new Item { Id = 1, Name = "Pen" };
Console.WriteLine(i.Id + " " + i.Name); // 1 Pen

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

ออบเจ็กต์ถ่ายโอนข้อมูลที่ไม่เปลี่ยนแปลง ซึ่งสร้างขึ้นทั้งหมดด้วยพร็อพเพอร์ตี init และตัวเริ่มต้นออบเจ็กต์

using System;

class OrderDto {
    public int Id { get; init; }
    public string Customer { get; init; }
    public decimal Amount { get; init; }
}

var o = new OrderDto { Id = 7, Customer = "Ada", Amount = 49.9m };
Console.WriteLine(o.Id + " " + o.Customer + " " + o.Amount); // 7 Ada 49.9

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

ทดสอบความเข้าใจของคุณเกี่ยวกับตัวตั้งค่าที่ใช้ได้เฉพาะตอนเริ่มต้น

สรุปทบทวน

คุณได้เรียนรู้ตัวตั้งค่าที่ใช้ได้เฉพาะตอนเริ่มต้น

  • { get; init; } อนุญาตให้กำหนดค่าได้เฉพาะระหว่างการสร้างออบเจ็กต์
  • ตัวเริ่มต้นออบเจ็กต์ทำงานร่วมกับพร็อพเพอร์ตี init ได้
  • คุณสามารถเพิ่มการตรวจสอบค่าผ่านส่วนเนื้อหา init ที่ประกาศอย่างชัดเจน
  • พร็อพเพอร์ตีแบบกำหนดตำแหน่งของเรคคอร์ดจะใช้ init โดยค่าเริ่มต้น

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

บทเรียน “ตัวกำหนดค่าแบบ init เท่านั้น” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ตัวกำหนดค่าแบบ init เท่านั้น”

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

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

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

บทเรียน “ตัวกำหนดค่าแบบ init เท่านั้น” ใช้เวลานานแค่ไหน

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

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

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

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

  1. ตัวกำหนดค่าแบบ init เท่านั้น
  2. ตัวปรับแต่ง required
  3. รูปแบบออบเจ็กต์ที่เปลี่ยนแปลงไม่ได้
  4. นิพจน์ with บนเรคคอร์ด
← กลับไปที่ C# Academy