Я изо всех сил пытался придумать хорошее название для этого вопроса, поэтому предложения приветствуются.
Допустим, у нас есть абстрактный базовый класс ActionBase, который выглядит примерно так:
public abstract class ActionBase
{
public abstract string Name { get; }
public abstract string Description { get; }
// rest of declaration follows
}
И у нас определено несколько различных действий, таких как MoveFileAction, WriteToRegistryAction и т. Д. Эти действия присоединяются к объектам Worker:
public class Worker
{
private IList<ActionBase> _actions = new List<ActionBase>();
public IList<ActionBase> Actions { get { return _actions; } }
// worker stuff ...
}
Пока все довольно просто. Теперь я хотел бы иметь пользовательский интерфейс для настройки рабочих, назначения действий, настройки свойств и так далее. В этом пользовательском интерфейсе я хочу представить список всех доступных действий вместе с их свойствами, и для этого я хотел бы сначала собрать все имена и описания доступных действий (плюс тип) в коллекцию следующих тип изделия:
public class ActionDescriptor
{
public string Name { get; }
public string Description { get; }
poblic Type Type { get; }
}
Конечно, я могу использовать отражение, чтобы сделать это, но есть ли лучший способ? Наличие в свойствах Name и Description свойств экземпляра ActionBase (в отличие от статики в производных классах) немного пахнет, но в C # нет абстрактной статики.
Спасибо!