Как наследовать List <> базовых объектов как List <> производных объектов? - PullRequest
0 голосов
/ 28 марта 2019

Можно ли наследовать список базовых объектов как список производных объектов?Не знаю, как это объяснить лучше.Надеюсь, этот пример прояснит:

public abstract class MyBase
{ }

public class MyConcrete: MyBase
{ }

public abstract class MyBases: IList<MyBase>
{
    internal abstract List<MyBase> Items { get; set; }
    public MyBase this[int index] { get => ((IList<MyBase>)Items)[index]; set => ((IList<MyBase>)Items)[index] = value; }

    // other implementations of IList...
}

public class MyConcretes: MyBases
{
    //Possible:
    internal override List<MyBase> Items { get; set; }

    // Needed
    internal override List<MyConcrete> Items { get; set; }
}

1 Ответ

1 голос
/ 28 марта 2019

Вы можете использовать шаблон класса.

public abstract class MyBases<T> : IList<T>
{
    internal abstract List<T> Items { get; set; }
    public MyBase this[int index] { get => ((IList<MyBase>)Items)[index]; set => ((IList<MyBase>)Items)[index] = value; }

    // other implementations of IList...
}

public class MyConcretes : MyBases<MyConcrete>
{
    internal override List<MyConcrete> Items { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...