Рассмотрим следующую иерархию классов:
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). Очевидно, что я не могу изменить иерархию классов для удовлетворения моих потребностей, поэтому мне нужно другое обходное решение.