Здравствуйте, Barbar1an, Вы писали:
B>ортодоксальный способ использовать какуюто абстракцию мембера в базовом классе
Можете показать абстракцию в вашем втором примере? Вы "жёстко зашили" то, что в
Base есть некое поле, которое хранит некий
IEnumerable<object> (который кто-то доолжен когда=то проинициализировать как ему надо)
Это не абстракция, это просто "данность" (и иногда это бывает лучше не нужной абстракции).
Но она не может полностью заменить абвтракцию: например, если в чётные секунды нужно возвращать из
Items одно, а в нечётные другое.
То есть "в абстракции" (в первом примере) о том, какое фактическое значение вернуть,
можно решать в момент возврата. У вас же такого нет.
ортодоксальный способ использовать какуюто абстракцию мембера в базовом классе
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 г.
Здравствуйте, Barbar1an, Вы писали:
AFAIR где то
тут было предложение по ковариантности результирующих типов при перекрытии вирт. методов. Тебе походу оно нужно.
Если б Base был интерфейсом, можно было бы явно его реализовать
Здравствуйте, Jack128, Вы писали:
J>Здравствуйте, Barbar1an, Вы писали:
J>AFAIR где то тут было предложение по ковариантности результирующих типов при перекрытии вирт. методов. Тебе походу оно нужно.
J>Если б Base был интерфейсом, можно было бы явно его реализовать
Champion "Covariant Return Types" (VS 16.8, .NET 5)
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.