ใน C # where T : class
หมายความว่าอย่างไร?
กล่าวคือ
public IList<T> DoThis<T>() where T : class
ใน C # where T : class
หมายความว่าอย่างไร?
กล่าวคือ
public IList<T> DoThis<T>() where T : class
คำตอบ:
เพียงแค่ใส่สิ่งนี้คือการ จำกัด พารามิเตอร์ทั่วไปให้กับคลาส (หรือโดยเฉพาะอย่างยิ่งประเภทการอ้างอิงซึ่งอาจเป็นคลาสอินเทอร์เฟซผู้ร่วมประชุมหรือประเภทอาร์เรย์)
ดูบทความ MSDN นี้สำหรับรายละเอียดเพิ่มเติม
มันเป็นข้อ จำกัด ประเภททั่วไป ในกรณีนี้หมายความว่าประเภททั่วไปT
จะต้องเป็นประเภทอ้างอิง (คลาสอินเทอร์เฟซผู้ร่วมประชุมหรือประเภทอาร์เรย์)
เป็นข้อ จำกัด ประเภทT
โดยระบุว่าต้องเป็นคลาส
where
ข้อสามารถนำมาใช้เพื่อระบุข้อ จำกัด ประเภทอื่น ๆ เช่น:
where T : struct // T must be a struct
where T : new() // T must have a default parameterless constructor
where T : IComparable // T must implement the IComparable interface
สำหรับข้อมูลเพิ่มเติมโปรดดูที่หน้า MSDN บนwhere
ข้อหรือข้อ จำกัด พารามิเตอร์ทั่วไป
where T : class, IComparable, new()
ที่ จำกัดT
การอ้างอิงประเภท คุณจะใส่ประเภทค่า ( struct
s และประเภทดั้งเดิมยกเว้นstring
) ที่นั่นไม่ได้
หมายความว่าประเภทที่ใช้T
เมื่อใช้วิธีการทั่วไปจะต้องเป็นคลาส - กล่าวคือไม่สามารถเป็นโครงสร้างหรือสร้างขึ้นในจำนวนเช่นint
หรือdouble
// Valid:
var myStringList = DoThis<string>();
// Invalid - compile error
var myIntList = DoThis<int>();
where T: class
หมายถึงอย่างนั้นT has to be a class
จริงๆ สามารถอ้างอิงประเภทใดก็ได้ ตอนนี้เมื่อใดก็ตามที่รหัสใด ๆ ของคุณเรียกDoThis<T>()
วิธีการนั้นจะต้องให้ระดับการแทนที่T ตัวอย่างเช่นถ้าฉันจะเรียกDoThis<T>()
วิธีของคุณฉันจะต้องเรียกมันว่าดังต่อไปนี้:
DoThis<MyClass>();
หากวิธีการของคุณเป็นดังนี้:
public IList<T> DoThis<T>() where T : class
{
T variablename = new T();
// other uses of T as a type
}
จากนั้น T ที่เคยปรากฏในวิธีการของคุณมันจะถูกแทนที่ด้วย MyClass ดังนั้นวิธีสุดท้ายที่คอมไพเลอร์เรียกใช้จะมีลักษณะดังนี้:
public IList<MyClass> DoThis<MyClass>()
{
MyClass variablename= new MyClass();
//other uses of MyClass as a type
// all occurences of T will similarly be replace by MyClass
}
new T()
เป็นไปไม่ได้ด้วยwhere T : class
. คุณต้องระบุว่าwhere T: new()
ได้รับอนุญาตให้ทำได้
เรียกว่าข้อ จำกัด ประเภทพารามิเตอร์ มัน จำกัด ประเภท T ได้อย่างมีประสิทธิภาพ
อาร์กิวเมนต์ประเภทต้องเป็นประเภทอ้างอิง นอกจากนี้ยังใช้กับคลาสอินเทอร์เฟซผู้ร่วมประชุมหรือประเภทอาร์เรย์
ข้อ จำกัด เกี่ยวกับพารามิเตอร์ประเภท (คู่มือการเขียนโปรแกรม C #)
T หมายถึงประเภทออบเจ็กต์ซึ่งหมายความว่าคุณสามารถกำหนดประเภทของ. IList: ถ้า IList s = IList ใหม่; ตอนนี้ s.add ("ยอมรับสตริงเสมอ")
ในที่นี้ T หมายถึงคลาสอาจเป็นประเภทอ้างอิงได้
'T' หมายถึงประเภททั่วไป หมายความว่าสามารถรับคลาสประเภทใดก็ได้ บทความต่อไปนี้อาจช่วยได้:
http://www.15seconds.com/issue/031024.htm