Рассмотрим следующую иерархию классов:
public interface X { void Foo(); }
public interface Y { void Bar(); }
public class A : X, Y
{
public void Foo() {}
public void Bar() {}
}
public class B : X, Y
{
public void Foo() {}
public void Bar() {}
}
Можно ли каким-либо образом определить список (или любой общий тип, если это важно), который может содержать как A
, так и B
, позволяя мне обрабатывать содержимое указанного списка как X
и Y
? То есть что-то, что позволит мне написать что-то по этому поводу:
var list = ???
list.Add(new A());
list.Add(new B());
list.First().Foo();
list.Last().Bar();
Edit
Чтобы уточнить, типы, с которыми я сейчас сталкиваюсь, это ObservableCollection<T>
(A
) и ReadOnlyObservableCollection<T>
(B
), где интересующие интерфейсы IList<T>
(X
) и INotifyCollectionChanged
(Y
). Очевидно, что я не могу изменить иерархию классов для удовлетворения моих потребностей, поэтому мне нужно другое обходное решение.