Конструкции общих интерфейсов в пределах рамок, а также конструкции делегатов (которые обеспечивало квази-общее поведение до появления реальных дженериков), требуют, чтобы весь ген Параметры типа ric заменяются обобщенными дженериками. Можно разработать интерфейсы для использования с генераторами открытой формы, но интерфейсы в рамках этой схемы не подходят.
В качестве простого примера предположим, что кто-то хочет иметь интерфейс, который несколько аналогичен Action<T>
, но вместо того, чтобы параметр типа T
, он будет принимать один параметр любого типа, который удовлетворяет двум ограничениям, ТС1 и tc2. Можно было бы определить как:
interface ActStatisfyingConstraints<in TC1, in TC2>
{
void Invoke<T>(ref T param) where T:TC1,TC2;
}
Следует отметить, что реализация этого интерфейса сможет передать T
как общий параметр для любого другого метода, стесненного его TC1
и TC2
, даже если нет ни одного класса который удовлетворяет обоим ограничениям, а также служит базовым классом для всех объектов.
В случае вашей наблюдаемой коллекции вы должны определить интерфейс наблюдателя, который включает методы уведомления, подобные описанным выше. Метод подписки на события будет содержать список ссылок на наблюдателей; добавив что-то в коллекцию, затем вызовите общий метод уведомления о добавленном элементе для каждого элемента в списке.
Мне действительно не хватает этой функции :(. –