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

เมธอด/ชนิดแบบเจเนอริกและข้อจำกัด

เขียนเมธอดและชนิดแบบเจเนอริก เพิ่มข้อจำกัดด้วย where T : … (class, struct, new(), อินเทอร์เฟซ/ชนิดฐาน)

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

ภาพรวมชนิดข้อมูลแบบทั่วไป

เป้าหมาย: นำโค้ดกลับมาใช้ใหม่อย่างปลอดภัยด้วย ชนิดข้อมูลแบบทั่วไป

  • เมธอดและชนิดข้อมูลแบบทั่วไป
  • ข้อจำกัด: class, struct, new(), อินเทอร์เฟซหรือชนิดฐาน
  • ทำตัวอย่างให้มีขนาดเล็กและชัดเจน

เมธอดแบบทั่วไป

เมธอดแบบทั่วไป มีรายการพารามิเตอร์ชนิดข้อมูล เช่น Identity<T> และทำงานกับชนิดข้อมูลได้หลายแบบ

using System;

// Generic method works for any T
public class Program
{
  static T Identity<T>(T value)
  {
    // just returns what it got
    return value;
  }

  public static void Main(string[] args)
  {
    int a = Identity<int>(5);
    string b = Identity<string>("hi");
    Console.WriteLine(a + " & " + b);
  }
}

ชนิดข้อมูลแบบทั่วไป

ชนิดข้อมูลแบบทั่วไป เช่น Box<T> จะถูกคอมไพล์ครั้งเดียวและนำไปใช้กับชนิดข้อมูลจริงได้หลายชนิด

using System;

// Simple generic type to hold a value
public sealed class Box<T>
{
  private T _value;
  public Box(T value) { _value = value; }
  public T Get() { return _value; }
  public void Set(T value) { _value = value; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Box<int> bi = new Box<int>(10);
    Box<string> bs = new Box<string>("ok");
    Console.WriteLine(bi.Get() + " | " + bs.Get());
  }
}

ข้อจำกัด new()

เพิ่ม where T : new() หากต้องการเรียกใช้ new T() ภายในโค้ดแบบทั่วไป

using System;

// Factory that can create T with a parameterless ctor
public static class Factory
{
  public static T Create<T>() where T : new()
  {
    return new T(); // allowed thanks to new() constraint
  }
}

public sealed class Person
{
  public string Name;
  public Person() { Name = "Anon"; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Person p = Factory.Create<Person>();
    Console.WriteLine(p.Name);
  }
}

ข้อจำกัดด้านอินเทอร์เฟซ

จำกัด T ให้เป็นอินเทอร์เฟซหรือชนิดฐาน เพื่อให้คุณเรียกใช้สมาชิกของชนิดนั้นได้ เช่น IComparable<T>

using System;

// Min for two values that can be compared
public static class Utils
{
  public static T Min<T>(T a, T b) where T : IComparable<T>
  {
    return a.CompareTo(b) <= 0 ? a : b;
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine(Utils.Min(5, 3));          // 3
    Console.WriteLine(Utils.Min("b", "a"));      // a
  }
}

ข้อจำกัดด้านคลาส/โครงสร้างและเคล็ดลับ

ข้อจำกัดอื่น ๆ:

  • where T : class → ใช้ได้เฉพาะชนิดอ้างอิง
  • where T : struct → ใช้ได้เฉพาะชนิดค่าแบบไม่เป็นค่าว่าง
  • รวมข้อจำกัดได้ เช่น where T : class, IDisposable, new()
  • ทำส่วนติดต่อให้มีเฉพาะสิ่งจำเป็น และเลือกใช้ข้อจำกัดด้านอินเทอร์เฟซเพื่อความยืดหยุ่น

ความหมายของข้อจำกัด new()

ตรวจสอบความเข้าใจ: ข้อจำกัดใดทำให้คุณสร้าง new T() ภายในโค้ดแบบทั่วไปได้

ทบทวน

ทบทวน: สร้าง เมธอด/ชนิดข้อมูลแบบทั่วไป และเพิ่ม ข้อจำกัด เพื่อเรียกใช้สมาชิกที่จำเป็น: ใช้อินเทอร์เฟซหรือชนิดฐานสำหรับพฤติกรรม ใช้ class/struct เพื่อกำหนดประเภทของชนิดข้อมูล และใช้ new() เพื่อเรียกตัวสร้างที่ไม่มีพารามิเตอร์

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

บทเรียน “เมธอด/ชนิดแบบเจเนอริกและข้อจำกัด” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “เมธอด/ชนิดแบบเจเนอริกและข้อจำกัด”

เขียนเมธอดและชนิดแบบเจเนอริก เพิ่มข้อจำกัดด้วย where T : … (class, struct, new(), อินเทอร์เฟซ/ชนิดฐาน) คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

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

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

บทเรียน “เมธอด/ชนิดแบบเจเนอริกและข้อจำกัด” ใช้เวลานานแค่ไหน

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

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

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

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

  1. เมธอด/ชนิดแบบเจเนอริกและข้อจำกัด
  2. ความแปรผัน (in/out) กับอินเทอร์เฟซและผู้รับมอบหมาย
  3. ชนิดอ้างอิงที่เป็นค่าว่างได้ (ความตระหนักรู้) และคำอธิบายประกอบ (รูปแบบ C# 6)
← กลับไปที่ C# Academy