Tôi gặp vấn đề với việc hiểu cách các ràng buộc chung chung hoạt động như thế nào. Tôi nghĩ rằng tôi đang thiếu một cái gì đó quan trọng ở đây. Tôi đã kèm theo các câu hỏi của tôi trong các ý kiến và sẽ biết ơn vì đã cung cấp một số giải thích.Ràng buộc chung trên T là kiểu tham chiếu và loại giá trị cùng một lúc?
//1st example:
class C <T, U>
where T : class
where U : struct, T
{
}
//Above code compiles well,
//On first sight it looks like U might be reference type and value type
//at the same time. The only reason I can think of, is that T may be an
//interface which struct can implement, Am I correct?
//2nd example
class CC<T, U>
where T : class, new()
where U : struct, T
{
}
//I added also a reguirement for parameterless constructor
//and, much to my surprise, it still compiles what is
//a bit inexplicable for me.
//What 'U' would meet the requirement to be
//value type, reference type and have a contructor at the same time?
Có? và? Bạn đã chỉ định nó cho T, nó sẽ khớp với hàm tạo đối tượng. Vậy là được rồi. –
Có bạn nói đúng, tôi đã đọc sai. @Mark Byers bạn nói rằng tất cả các cấu trúc xuất phát từ 'đối tượng'. SO Nếu tôi có 'lớp CS trong đó T: class {}' Mã như 'CS obj = new CS ();' sẽ không hoạt động trong khi 'DateTime' có thể chuyển thành đối tượng. –
nan
@Andrzej Nosal: Có, bởi vì ràng buộc 'T: class' không có nghĩa là * T có thể cast thành đối tượng *. Nó có nghĩa là * T phải là một kiểu tham chiếu *. DateTime không phải là kiểu tham chiếu. –