Không có loại như vậy của những hạn chế trong .NET. Chỉ có sáu loại chế sẵn (xem Constraints on Type Parameters):
where T: struct
kiểu lập luận phải là một kiểu giá trị
where T: class
kiểu lập luận phải là một loại tài liệu tham khảo
where T: new()
kiểu lập luận phải có một constructor parameterless công cộng
where T: <base class name>
đối số loại phải là hoặc lấy được từ lớp cơ sở được chỉ định
where T: <interface name>
đối số loại phải là hoặc triển khai interfa được chỉ định ce
where T: U
kiểu lập luận cung cấp cho T phải hoặc xuất phát từ lập luận cung cấp cho U
Nếu bạn muốn cast xâu thành kiểu của bạn, bạn có thể làm đúc để phản đối đầu tiên. Nhưng bạn không thể đặt hạn chế về số loại để đảm bảo đúc này có thể xảy ra:
static T GetObjectFromRegistry<T>(string regPath)
{
string regValue = //Getting the regisstry value...
T objectValue = (T)(object)regValue;
return objectValue ;
}
Một lựa chọn khác - tạo giao diện:
public interface IInitializable
{
void InitFrom(string s);
}
Và đặt nó như là hạn chế:
static T GetObjectFromRegistry<T>(string regPath)
where T: IInitializable, new()
{
string regValue = //Getting the regisstry value...
T objectValue = new T();
objectValue.InitFrom(regValue);
return objectValue ;
}
Nguồn
2013-07-24 06:50:09
Không có hạn chế như vậy trong .NET –