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