Có bất kỳ khả năng kiểm tra loại thời gian an toàn, biên dịch nào đề cập đến các giá trị triển khai nhiều giao diện không?Nhập các giá trị đa hình với nhiều giao diện trong C#
Với
interface A {
void DoA();
}
interface B {
void DoB();
}
Tôi có thể viết mã cho các đối tượng thực hiện A
hayB
, nhưng không phải cả hai. Vì vậy, tôi đã đưa ra các trình bao bọc xấu xí:
class ABCollection {
private class ABWrapper : A, B {
private readonly A a;
private readonly B b;
public static ABWrapper Create<T>(T x) where T : A, B {
return new ABWrapper { a = x, b = x };
}
public void DoA() {
a.DoA();
}
public void DoB() {
b.DoB();
}
}
private List<ABWrapper> data = new List<ABWrapper>();
public void Add<T>(T val) where T : A, B {
data.Add(ABWrapper.Create(val));
}
}
Có cách nào để viết mã này trực quan hơn mà không làm mất an toàn loại (thời gian chạy-v.v ...)?
Ví dụ:
private List<A and B> ...
Sửa: Đây không phải là về việc có một danh sách đặc biệt - Tôi chỉ muốn đưa ra một "hoàn thành" ví dụ với vấn đề lưu trữ giá trị như vậy. Vấn đề của tôi chỉ là cách nhập kết hợp cả hai giao diện (như A & B
hoặc A and B
).
Một hữu ích hơn dụ: List<IDrawable & IMovable>
...
Ghi điểm cho các Generics Java (cuối cùng). –
@mmyers: Java generics sẽ giúp ích như thế nào ở đây? Các ký tự đại diện cho phép bạn viết 'Danh sách mở rộng A & B> ', là tốt đẹp (và C# không thể phù hợp với điều đó), nhưng đó là' AND', và anh ta muốn 'OR'. –
@PavelMinaev: Tôi không muốn HOẶC - Ví dụ Java bạn đưa ra chính xác là những gì tôi đang tìm kiếm. – Dario