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

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

Сообщение Anonymous »

РЕДАКТИРОВАТЬ: Тогда может ли кто-нибудь понять, почему связанный «ответ» относится к моему вопросу? Я понял суть проблемы, мне просто хотелось бы помочь найти способ ее решения.
Вот почему SO так недружелюбен к новичкам: есть люди, которые явно чего-то не понимают, а затем указывают к смутно связанным проблемам только потому, что это доступно.
Кстати, ссылка не кажется мне ответом, а лишь предполагает, что причина в ковариации, и, возможно, интерфейс позволит это.
Ф.У. SO.
У меня определены следующие классы (код отредактирован для краткости)

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

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#»