Мне дают занятия ContainerA
, ContainerB
, ElementA
и ElementB
.Я не могу изменить эти классы по очень веским причинам ™, за исключением того, что я могу добавить интерфейсы.
Мне хотелось бы что-то вроде интерфейса IElements
(ожидаемо допустимого), так как это позволило бымне легко зациклить элементы и прочитать свойства из элементов ContainerA
или ContainerB
, не зная, какая конкретная реализация фактически используется.Нет методов ни на одном из классов.Для классов элементов мне нужен только доступ к свойствам, реализованным ElementA
, примером чего является свойство Id
.
Какие у меня есть варианты?
public interface IElements
{
List<ElementA> Elements { get; set; }
}
public class ContainerA : IElements
{
public List<ElementA> Elements { get; set; }
}
public class ContainerB : IElements
{
public List<ElementB> Elements { get; set; }
}
public class ElementA
{
public string Id { get; set; }
}
public class ElementB : ElementA
{
}
Я надеюсь чего-то достичьпохож на:
IElements container = ...;
foreach (var element in container.Elements)
{
Console.WriteLine(element.Id);
}