Câu trả lời:
Nói một cách đơn giản, đây là ràng buộc tham số chung cho một lớp (hay cụ thể hơn là một kiểu tham chiếu có thể là một lớp, giao diện, ủy nhiệm hoặc kiểu mảng).
Xem bài viết MSDN này để biết thêm chi tiết.
Đây là một ràng buộc kiểu chung . Trong trường hợp này, điều đó có nghĩa là kiểu chung T
phải là kiểu tham chiếu (lớp, giao diện, ủy nhiệm hoặc kiểu mảng).
Đó là một ràng buộc kiểu T
, chỉ định rằng nó phải là một lớp.
Các where
điều khoản có thể được dùng để xác định những hạn chế loại khác, ví dụ như:
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
Để biết thêm thông tin, hãy xem trang của MSDN về where
mệnh đề hoặc các ràng buộc tham số chung .
where T : class, IComparable, new()
Đó hạn chế T
đến các loại tài liệu tham khảo . Bạn sẽ không thể đặt các loại giá trị ( struct
s và loại nguyên thủy trừ string
) ở đó.
nó có nghĩa là kiểu được sử dụng như T
khi phương thức chung được sử dụng phải là một lớp - tức là nó không thể là một cấu trúc hoặc được xây dựng theo số lượng như int
hoặcdouble
// Valid:
var myStringList = DoThis<string>();
// Invalid - compile error
var myIntList = DoThis<int>();
where T: class
nghĩa đen là thế T has to be a class
. Nó có thể là bất kỳ loại tham chiếu. Bây giờ bất cứ khi nào bất kỳ mã gọi bạn DoThis<T>()
phương pháp nó phải cung cấp một lớp học để thay thế T . Ví dụ, nếu tôi gọi DoThis<T>()
phương thức của bạn thì tôi sẽ phải gọi nó như sau:
DoThis<MyClass>();
Nếu metthod của bạn giống như sau:
public IList<T> DoThis<T>() where T : class
{
T variablename = new T();
// other uses of T as a type
}
Sau đó, bất cứ khi nào T xuất hiện trong phương thức của bạn, nó sẽ được thay thế bằng MyClass. Vì vậy, phương thức cuối cùng mà trình biên dịch gọi, sẽ giống như sau:
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()
không thể với where T : class
. bạn phải xác định where T: new()
để được phép làm điều đó.
Nó được gọi là một ràng buộc tham số loại. Thực tế, nó hạn chế loại T có thể.
Đối số kiểu phải là kiểu tham chiếu; điều này cũng áp dụng cho bất kỳ lớp, giao diện, đại biểu hoặc loại mảng.
Ở đây T đề cập đến một Class.It có thể là một loại tham chiếu.
'T' đại diện cho một loại chung. Nó có nghĩa là nó có thể chấp nhận bất kỳ loại lớp. Bài viết sau đây có thể giúp:
http://www.15seconds.com/issue/031024.htm