@industriousSloth

Возможно ли создать интерфейс для списка следующих классов?

Добрый день! У меня генерируется с одного модуля список токенов. И я хотел использовать какой то паттерн, который бы по входящему списку выбирал класс и создавал его экземпляр. Но я не могу использовать Строителя, или Фабрику, потому что не могу найти единый интерфейс.
Вот список классов:
public class ProductA 
{
   public string FieldFirst { get;set; }
   public string FieldSecond { get; set; }
   public string FieldThird { get; set; }
   public string FieldFourth { get; set; }
}

public class ProductB 
{
   public string FieldFirst { get; set; }
   public string FieldSecond { get; set; }
   public string FieldThird { get; set; }
   public List<AnotherClass1> FieldFourth { get; set; }
}

public class ProductC 
{
   public string FieldFirst { get; set; }
   public string FieldSecond { get; set; }
   public List<AnotherClass2> FieldThird { get; set; }
}

public class ProductD 
{
   public string FieldFirst { get; set; }
   public List<AnotherClass3> FieldSecond  { get; set; }
}

Собственно, нельзя ли найти какой-нибудь интерфейс для них, и использовать, какой нибудь паттерн, например Абстрактную Фабрику или Строителя. Или это плохое решение в данном случае. Заранее огромное спасибо!
  • Вопрос задан
  • 230 просмотров
Решения вопроса 1
Nipheris
@Nipheris Куратор тега C#
Тут нужно оставить один вариант из двух: либо у вас все-таки есть общий интерфейс, через который вы будете работать с объектом любого класса, и тогда вам нужно решать задачу создания экземпляра, для чего можно применить либо упомянутую Фабрику, либо рефлексию. Если же вы твердо уверены, что интерфейс вам неизвестен, значит вы решаете мета-задачу - вам нужно сделать что-то с заранее неизвестными полями/методами заранее неизвестных классов (как например, при сериализации объектов в общем случае), тогда вам не обойтись без рефлексии/кодогенерации. Вы только четко для себя выясните, что вам известно о ваших объектах, а что нет.
С советом Oxoron пожалуй не соглашусь, т.к. если интерфейс пустой, значит он служит исключительно для целей добавления доп. информации о классе (ну т.е. вот у нас есть классы, реализующие его, а вот тут - не реализующие), а эта задача решается гораздо логичнее с использованием атрибутов - они для этого и были созданы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
DmitryITWorksMakarov
@DmitryITWorksMakarov
Может компоновщик подойдет? плюс свойство с мета-информацией об текущем объекте....
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы