เมธอด/ชนิดแบบเจเนอริกและข้อจำกัด
เขียนเมธอดและชนิดแบบเจเนอริก เพิ่มข้อจำกัดด้วย 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()
ทบทวน
ทบทวน: สร้าง เมธอด/ชนิดข้อมูลแบบทั่วไป และเพิ่ม ข้อจำกัด เพื่อเรียกใช้สมาชิกที่จำเป็น: ใช้อินเทอร์เฟซหรือชนิดฐานสำหรับพฤติกรรม ใช้ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เมธอด/ชนิดแบบเจเนอริกและข้อจำกัด
- ความแปรผัน (in/out) กับอินเทอร์เฟซและผู้รับมอบหมาย
- ชนิดอ้างอิงที่เป็นค่าว่างได้ (ความตระหนักรู้) และคำอธิบายประกอบ (รูปแบบ C# 6)