Я изо всех сил старался придумать хороший заголовок для этого вопроса, поэтому предложения приветствуются.Лучший свободный способ получить объекты с общим базовым классом
Скажем, у нас есть абстрактный базовый класс 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 ...
}
До сих пор довольно прямолинейно. Теперь я хотел бы иметь пользовательский интерфейс для настройки Workers, назначения Actions, установки свойств и т. Д. В этом пользовательском интерфейсе я хочу представить список всех доступных действий вместе со своими свойствами, и для этого я хотел бы сначала собрать все имена и описания доступных действий (плюс тип) в коллекцию следующих Тип товара:
public class ActionDescriptor
{
public string Name { get; }
public string Description { get; }
poblic Type Type { get; }
}
Конечно, я могу использовать отражение, чтобы сделать это, но есть ли лучший способ? Наличие имени и описания свойств экземпляра ActionBase (в отличие от статики на производных классах) немного пахнет, но в C# нет абстрактного статичного.
Спасибо!
Не существует «статической абстрактности», потому что нет понятия статического наследования. –
Я не спорю о «статической абстракции», просто отмечая, что ключевое слово «abstract» помогает заключить контракт. –
Возможно, я должен уточнить. Я не спорю о «статической абстрактности», и я понимаю, почему у нас нет этого в C#. Я имел в виду, что свойства Name и Description на самом деле не имеют особого смысла в экземпляре объекта, но я хочу, чтобы каждая реализация имела имя и описание, и нет способа обеспечить выполнение этого контракта с помощью свойство 'static'. –