การจับพารามิเตอร์ในสมาชิก
ใช้พารามิเตอร์ของคอนสตรักเตอร์หลักทั่วทั้งชนิดข้อมูล
การจับพารามิเตอร์ในสมาชิก เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน
การใช้พารามิเตอร์ในสมาชิก
จุดเด่นของตัวสร้างหลักคือการใช้พารามิเตอร์ภายในสมาชิกต่าง ๆ ได้แก่ เมธอด พร็อพเพอร์ตี และตัวเริ่มต้นฟิลด์ คอมไพเลอร์จะจัดการพื้นที่จัดเก็บให้ตามความจำเป็น
using System;
class Multiplier(int factor) {
public int Apply(int n) => n * factor;
}
Console.WriteLine(new Multiplier(3).Apply(5)); // 15การจับค่าเทียบกับการใช้เฉพาะในตัวเริ่มต้น
หากใช้พารามิเตอร์เฉพาะในตัวเริ่มต้นฟิลด์หรือพร็อพเพอร์ตี ก็ไม่จำเป็นต้องใช้พื้นที่จัดเก็บเพิ่มเติม แต่หากใช้ในเมธอด คอมไพเลอร์จะ จับ พารามิเตอร์นั้นไว้ในฟิลด์ที่ซ่อนอยู่
using System;
class A(int x) {
public int Stored = x; // initializer only
}
class B(int x) {
public int Get() => x; // captured into a field
}
Console.WriteLine(new A(7).Stored); // 7
Console.WriteLine(new B(9).Get()); // 9พารามิเตอร์เปลี่ยนแปลงค่าได้
พารามิเตอร์ของตัวสร้างหลักทำงานเหมือนพารามิเตอร์ทั่วไป กล่าวคือสามารถเปลี่ยนแปลงค่าได้ภายในอินสแตนซ์ เว้นแต่คุณจะปฏิบัติต่อพารามิเตอร์เหล่านั้นเป็นแบบอ่านอย่างเดียว การเปลี่ยนค่าจะเปลี่ยนฟิลด์ที่ถูกจับไว้ด้วย
using System;
class Toggle(bool on) {
public void Flip() => on = !on;
public bool State => on;
}
var t = new Toggle(false);
t.Flip();
Console.WriteLine(t.State); // Trueการเปิดเผยเป็นพร็อพเพอร์ตีแบบอ่านอย่างเดียว
รูปแบบที่ใช้กันทั่วไปคือการเปิดเผยพารามิเตอร์ผ่านพร็อพเพอร์ตีที่มีเฉพาะ get ซึ่งทำให้ส่วนติดต่อสาธารณะดูสะอาด ขณะที่ยังคงให้พารามิเตอร์เป็นข้อมูลภายใน
using System;
class User(string email) {
public string Email { get; } = email;
}
Console.WriteLine(new User("a@b.com").Email); // a@b.comพร็อพเพอร์ตีที่คำนวณจากพารามิเตอร์
พารามิเตอร์สามารถนำไปใช้กับพร็อพเพอร์ตีที่คำนวณค่าและมีเนื้อหาเป็นนิพจน์ได้อย่างเป็นธรรมชาติ
using System;
class Money(decimal amount, string currency) {
public string Display => amount.ToString("0.00") + " " + currency;
}
Console.WriteLine(new Money(9.5m, "USD").Display); // 9.50 USDพารามิเตอร์ในหลายเมธอด
พารามิเตอร์เดียวกันที่ถูกจับไว้สามารถใช้ร่วมกันในหลายเมธอดได้ โดยทำหน้าที่เสมือนฟิลด์ส่วนตัวที่เริ่มต้นค่าเมื่อสร้างอินสแตนซ์
using System;
class Range2(int lo, int hi) {
public bool Contains(int n) => n >= lo && n <= hi;
public int Clamp(int n) => Math.Max(lo, Math.Min(hi, n));
}
var r = new Range2(0, 10);
Console.WriteLine(r.Contains(5)); // True
Console.WriteLine(r.Clamp(15)); // 10การจับชนิดอ้างอิงไว้
พารามิเตอร์ชนิดอ้างอิงที่จับค่าไว้ช่วยให้คุณจัดเก็บสิ่งที่นำมาใช้ประกอบและเรียกใช้จากเมธอดใดก็ได้
using System;
using System.Collections.Generic;
class Repo(List<string> store) {
public void Add(string item) => store.Add(item);
public int Count => store.Count;
}
var list = new List<string>();
var repo = new Repo(list);
repo.Add("x");
Console.WriteLine(repo.Count); // 1หลีกเลี่ยงการจัดเก็บค่าซ้ำโดยไม่ตั้งใจ
หากคุณกำหนดพารามิเตอร์ให้กับฟิลด์ทั้ง และ ใช้พารามิเตอร์นั้นในเมธอด คุณอาจลงเอยด้วยการจัดเก็บค่าเดียวกันสองครั้ง ควรเลือกใช้แนวทางใดแนวทางหนึ่งเพื่อให้โค้ดชัดเจน
using System;
class Clean(int x) {
// expose once via property, reference property in methods
public int Value { get; } = x;
public int Doubled() => Value * 2;
}
Console.WriteLine(new Clean(4).Doubled()); // 8พารามิเตอร์ในแลมบ์ดา
แลมบ์ดาที่กำหนดอยู่ภายในคลาสสามารถจับพารามิเตอร์ไว้ได้เช่นเดียวกับฟิลด์
using System;
using System.Collections.Generic;
using System.Linq;
class Filter(int threshold) {
public IEnumerable<int> KeepAbove(IEnumerable<int> xs) =>
xs.Where(n => n > threshold);
}
var f = new Filter(3);
Console.WriteLine(string.Join(",", f.KeepAbove(new[]{1,2,3,4,5}))); // 4,5อายุการใช้งานของขอบเขต
พารามิเตอร์ที่จับค่าไว้จะมีชีวิตอยู่ตราบเท่าที่ออบเจ็กต์ยังมีอยู่ ในทางปฏิบัติ พารามิเตอร์นี้ถือเป็นสถานะของอินสแตนซ์ ดังนั้นอย่าสมมติว่าค่าจะถูกรีเซ็ตระหว่างการเรียกเมธอด
using System;
class Accumulator(int seed) {
private int total = seed;
public int Add(int n) { total += n; return total; }
}
var a = new Accumulator(100);
Console.WriteLine(a.Add(1)); // 101
Console.WriteLine(a.Add(1)); // 102นำทุกอย่างมาประกอบกัน
บริการนี้จับสิ่งที่นำมาใช้ประกอบไว้สองรายการและใช้รายการเหล่านั้นข้ามเมธอดต่าง ๆ เพื่อแสดงรูปแบบที่พบได้ทั่วไปในงานจริง
using System;
class PriceService(decimal taxRate, string currency) {
public decimal WithTax(decimal net) => net * (1 + taxRate);
public string Format(decimal v) => v.ToString("0.00") + " " + currency;
}
var s = new PriceService(0.2m, "EUR");
Console.WriteLine(s.Format(s.WithTax(100m))); // 120.00 EURตรวจสอบอย่างรวดเร็ว
ยืนยันว่าพารามิเตอร์ของตัวสร้างหลักถูกจัดเก็บอย่างไร
สรุปทบทวน
คุณได้เรียนรู้วิธีใช้พารามิเตอร์ของตัวสร้างหลักในสมาชิกต่าง ๆ
- เมื่อใช้ในเมธอด พารามิเตอร์จะถูกจับเก็บไว้ในฟิลด์ที่ซ่อนอยู่
- เมื่อใช้เฉพาะในตัวเริ่มต้น จะไม่จำเป็นต้องมีการจัดเก็บเพิ่มเติม
- เปิดเผยพารามิเตอร์ผ่านพร็อพเพอร์ตีที่อ่านได้อย่างเดียวเพื่อให้ส่วนติดต่อใช้งานสะอาด
- พารามิเตอร์เหล่านี้ทำหน้าที่เป็นสถานะของอินสแตนซ์ตลอดอายุการใช้งานของออบเจ็กต์
คำถามที่พบบ่อย
บทเรียน “การจับพารามิเตอร์ในสมาชิก” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การจับพารามิเตอร์ในสมาชิก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การจับพารามิเตอร์ในสมาชิก”
ใช้พารามิเตอร์ของคอนสตรักเตอร์หลักทั่วทั้งชนิดข้อมูล คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การจับพารามิเตอร์ในสมาชิก” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม
ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- คอนสตรักเตอร์หลักในคลาส
- การจับพารามิเตอร์ในสมาชิก
- คอนสตรักเตอร์หลักกับโครงสร้าง
- การใช้ร่วมกับคุณสมบัติและชนิดฐาน