Лучший способ отразить собственность ребенка на родителя - PullRequest
0 голосов
/ 21 октября 2018

У меня есть какой-то устаревший код, который необходимо изменить.Сначала у меня есть интерфейс дочернего класса: IChild.и некоторые классы, которые реализуют этот интерфейс, например: ChildType1 : IChild, ChildType2 : IChild и ChildType3 : IChild.

Родитель имеет свойства дочерних типов, и каждый раз, только один из них получает инициализированный пример, если ChildType1имеет значение ChildType2 и ChildType3: null:

class Parent
{
    public ChildType1 Type1 { get; set; }
    public ChildType2 Type2 { get; set; }
    public ChildType3 Type3 { get; set; }
    //...
}

* * * * * * * * * * * * * * * * * * * * * * * * * * IChild имеет несколько важных свойств Enum:

public interface IChild
{
    ImportantEnum MyEnum { get; set; } 
    //
}

Мой вопрос: относительно того факта, что яНе знаете, какой из типов инициирован, каков наилучший способ сделать свойство child MyEnum доступным через родительский API?

Я открыт для рефакторинга.

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

Мне кажется, что вам нужно сменить класс Parent - и, судя по информации, которую вы предоставили на данный момент, это идеальный кандидат для использования генериков:

class Parent<TChild> where TChild : IChild
{
    public TChild Child { get; set; }
}
0 голосов
/ 21 октября 2018

Я бы реорганизовал его так, чтобы вы напрямую выставляли текущий экземпляр IChild, из которого тривиально запрашивать MyEnum.

class Parent
{
    Public IChild Child { get; set; }
}
...
Parent p = new Parent();
IChild child = p.Child;
Type childType = p.Child.GetType();
ImportantEnum val = child.MyEnum
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...