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

การจับพารามิเตอร์ในสมาชิก

ใช้พารามิเตอร์ของคอนสตรักเตอร์หลักทั่วทั้งชนิดข้อมูล

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

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

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