Проблема с использованием параметра ковариации, когда определение параметра и переданный параметр имеют один и тот же тиC#

Место общения программистов C#
Anonymous
Проблема с использованием параметра ковариации, когда определение параметра и переданный параметр имеют один и тот же ти

Сообщение Anonymous »

У меня определены следующие классы (код отредактирован для краткости)

Код: Выделить всё

public interface ICollectionItem
{}
Который, в свою очередь, наследуется:

Код: Выделить всё

public class CollectionItem : NotifyPropertyChanged, ICollectionItem
{}
И, в свою очередь, наследуется:

Код: Выделить всё

public class DeviceItem : CollectionItem, IDisposable, IAsyncDisposable
{
public DeviceItem(DeviceCollectionBase deviceCollection)
{}
}
У которого есть конструктор, поэтому я могу затем создать экземпляр DeviceItem из еще одного класса:

Код: Выделить всё

public abstract class DeviceCollectionBase : PacedItemCollection, IDisposable, IAsyncDisposable where T : ICollectionItem
{

protected override async Task UpdateCollection()
{
var v = new DeviceItem(this)...
}
}
Но параметр this отмечен ошибкой CS1503 «Тип аргумента DeviceCollectionBase не может быть назначен типу параметра DeviceCollectionBase , но T ограничен ICollectionItem.
Итак, здесь у нас есть определение параметра, запрашивающее ICollectionItem, и параметр, переданный в реализацию из ICollectionItem
Мои игры с ковариацией и/или контрвариантностью - дерьмо, поэтому я не совсем понимаю, где я ошибаюсь, и как обойти эту проблему, любая помощь пожалуйста?

Подробнее здесь: https://stackoverflow.com/questions/788 ... rameter-pa

Вернуться в «C#»