Đây là thông số loại chung, see Generics documentation.
T
không phải là từ khóa dành riêng. T
, hoặc bất kỳ tên cụ thể nào, có nghĩa là thông số loại. Kiểm tra các phương pháp sau đây (giống như một ví dụ đơn giản).
T GetDefault<T>()
{
return default(T);
}
Lưu ý rằng kiểu trả về là T
. Với phương pháp này bạn có thể nhận giá trị mặc định của bất kỳ loại bằng cách gọi phương pháp này là:
GetDefault<int>(); // 0
GetDefault<string>(); // null
GetDefault<DateTime>(); // 01/01/0001 00:00:00
GetDefault<TimeSpan>(); // 00:00:00
NET sử dụng Generics trong bộ sưu tập, ... Ví dụ:
List<int> integerList = new List<int>();
Bằng cách này bạn sẽ có một danh sách mà chỉ chấp nhận số nguyên, vì lớp được instancited với kiểu T
, trong trường hợp này int
, và phương pháp mà thêm yếu tố được viết như sau:
public class List<T> : ...
{
public void Add(T item);
}
Một số thông tin khác về generics.
Bạn có thể giới hạn phạm vi loại T
.
Ví dụ sau chỉ cho phép bạn gọi phương pháp này với các loại mà các lớp học:
void Foo<T>(T item) where T: class
{
}
Ví dụ sau chỉ cho phép bạn gọi phương thức với các loại mà Circle
hoặc kế thừa từ nó.
void Foo<T>(T item) where T: Circle
{
}
Và có new()
nói rằng bạn có thể tạo một thể hiện của T
nếu nó có một constructor parameterless. Trong ví dụ sau T
sẽ được coi như Circle
, bạn nhận được IntelliSense ...
void Foo<T>(T item) where T: Circle, new()
{
T newCircle = new T();
}
Như T
là một tham số kiểu, bạn có thể nhận được các đối tượng Type
từ nó. Với Type
bạn có thể sử dụng phản ánh ...
void Foo<T>(T item) where T: class
{
Type type = typeof(T);
}
Như một ví dụ phức tạp hơn, kiểm tra chữ ký của ToDictionary
hoặc bất kỳ phương pháp LINQ khác.
public static Dictionary<TKey, TSource> ToDictionary<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector);
Không có một T
, tuy nhiên có TKey
và TSource
. Chúng tôi khuyên bạn luôn đặt tên cho các tham số kiểu với tiền tố T
như được hiển thị ở trên.
Bạn có thể đặt tên TSomethingFoo
nếu muốn.
Ngắt của http://stackoverflow.com/questions/361336/what-are-generic-collections-in-c#361365 và http://stackoverflow.com/questions/400314/what-does-t-mean -in-c. – Abel
Sao chép nhiều người khác, nhưng cũng không có chủ đề như những người khác vì nó yêu cầu [tài liệu] (http://msdn.microsoft.com/en-us/library/512aeb7t.aspx) hoặc hướng dẫn. –