Tôi có một lớp sưu tập với phương thức Bằng mà tôi muốn chuyển vào một phương thức để thực hiện kiểm tra bình đẳng giữa mỗi mục. Hơn nữa, tôi muốn cho phép các loại đại biểu để hoạt động trên superclasses của T cũng như T bản thân:Tôi có thể chỉ định mối quan hệ 'siêu kiểu' trong các ràng buộc chung của C# không?
public delegate bool EqualityComparer<T>(T x, T y);
public class Collection<T>
{
//...
public bool Equals<U>(Collection<T> other, EqualityComparer<U> eq) where T : U
{
// code using eq delegate to test equality between
// members of this and other collection
}
}
Thật không may, trình biên dịch borks trên này ('Collection.Equals()' không xác định tham số kiểu 'T '). Có cách nào xác định loại ràng buộc/hoạt động này không?
Có ý nghĩa để có thể không? Sẽ không làm cho nó có thể bởi suy luận khó bởi vì hai khai báo có thể được lan truyền trong toàn bộ dự án, hoặc thậm chí không được chỉ định – Dykam
Vâng, nó có ý nghĩa hoàn hảo - bạn có thể chỉ định rằng tham số kiểu phải là * phân lớp * của một cái gì đó khác, vậy tại sao không phải là cách khác vòng? (Java cho phép điều này, sử dụng 'T super Foo' thay vì' T mở rộng Foo', btw.) –
Ah - Tôi thấy bạn đang chỉnh sửa câu trả lời của bạn để đặt những gì tôi đã viết như một người lái :) – ShuggyCoUk