new удобнее override
От: Barbar1an Украина  
Дата: 18.10.24 12:00
Оценка:
ортодоксальный способ использовать какуюто абстракцию мембера в базовом классе

abstract class Base
{
    public abstract IEnumerable<object>    Items { get;} 
}


class Implementer : Base
{
    public override IEnumerable<object>    Items => _Items;

    List<object> _Items;

    public Implementer()
    {
        _Items.Add(null);
        _Items.Remove(null);
    }
}


но тут я должен вводит 2 мембер с другим именем

abstract class Base
{
    public IEnumerable<object>    Items { get; protected set; } 
}


class Implementer : Base
{
    new public List<object>    Items => base.Items as List<object>;

    public Implementer1()
    {
        base.Items = new List<object>();

        Items.Add(null);
        Items.Remove(null);
    }
}


а так не нежно ничего добавлять и используем одно и тоже имя везде
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re: new удобнее override
От: Jack128  
Дата: 18.10.24 12:16
Оценка:
Здравствуйте, Barbar1an, Вы писали:

AFAIR где то тут было предложение по ковариантности результирующих типов при перекрытии вирт. методов. Тебе походу оно нужно.
Если б Base был интерфейсом, можно было бы явно его реализовать
Re[2]: new удобнее override
От: _NN_ www.nemerleweb.com
Дата: 19.10.24 14:54
Оценка:
Здравствуйте, Jack128, Вы писали:

J>Здравствуйте, Barbar1an, Вы писали:


J>AFAIR где то тут было предложение по ковариантности результирующих типов при перекрытии вирт. методов. Тебе походу оно нужно.

J>Если б Base был интерфейсом, можно было бы явно его реализовать

Champion "Covariant Return Types" (VS 16.8, .NET 5)
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: new удобнее override
От: _FRED_ Черногория
Дата: 21.10.24 19:43
Оценка: +1
Здравствуйте, Barbar1an, Вы писали:

B>ортодоксальный способ использовать какуюто абстракцию мембера в базовом классе


Можете показать абстракцию в вашем втором примере? Вы "жёстко зашили" то, что в Base есть некое поле, которое хранит некий IEnumerable<object> (который кто-то доолжен когда=то проинициализировать как ему надо)
Это не абстракция, это просто "данность" (и иногда это бывает лучше не нужной абстракции).
Но она не может полностью заменить абвтракцию: например, если в чётные секунды нужно возвращать из Items одно, а в нечётные другое.
То есть "в абстракции" (в первом примере) о том, какое фактическое значение вернуть, можно решать в момент возврата. У вас же такого нет.
Help will always be given at Hogwarts to those who ask for it.
Re: new удобнее override
От: TK Лес кывт.рф
Дата: 31.10.24 05:43
Оценка:
Здравствуйте, Barbar1an, Вы писали:

B>а так не нежно ничего добавлять и используем одно и тоже имя везде


Просто от Base наследоваться не надо и все — new можно не писать
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.