Как позволить подклассу указывать такие детали, как имя и описание - PullRequest
0 голосов
/ 19 января 2009

У меня есть интерфейс под названием ICommand, от которого наследуются различные классы. Все эти классы делают разные вещи с методом Run (), но все они должны иметь свойство Name и свойство Description, которое определяет, что они делают.

Вопрос в том, как мне разрешить каждому подклассу указывать эти свойства (Имя и Описание). На данный момент я поместил свойство для обоих в ICommand, и я получаю каждый подкласс для реализации этих свойств и просто имею в себе оператор return "Blah Blah Blah". Это лучший способ сделать это? Или это должно быть сделано по-другому?

Извините, если это кажется глупым вопросом - я только начинаю с этого дизайна ООП и хочу проверить, правильно ли я делаю.

Ответы [ 6 ]

1 голос
/ 19 января 2009

Я написал что-то похожее (плагины), где каждый класс имеет свое имя и описание и в итоге реализовал, как говорит Себастьян, со свойством ReadOnly

interface ICommand {
string Name { get; }
string Description { get; }
...

classSpecific : ICommand {
public string Name { get { return "Specific"; }}
public string Description { get { return "Specific description"; }}
...
1 голос
/ 19 января 2009

Я думаю, определение свойства Readonly в интерфейсе - лучший способ.

0 голосов
/ 19 января 2009

Если свойства Name и Description различны для каждого реализующего класса, то обязательно делайте то, что вы делаете. Заставьте каждый класс реализовать эти свойства (через ваш интерфейс) и предоставьте им подробную информацию. Однако, если Имя и Описание могут быть одинаковыми для многих классов (хотя с именем и описанием это, вероятно, не произойдет), тогда другой альтернативой будет абстрактный класс, где Run () является абстрактным методом, а Имя и Описание - это виртуальные свойства.

0 голосов
/ 19 января 2009

Вы на правильном пути. То, что вы описываете, похоже на шаблон стратегии , где у вас есть несколько классов, которые реализуют интерфейс (либо реальный интерфейс, либо абстрактный класс), а затем имеют свои собственные реализации для методов.

0 голосов
/ 19 января 2009

Считается, что классы реализуют интерфейс, а не наследуют его, поскольку интерфейс не имеет реализации (и, следовательно, нечего наследовать). Вы, безусловно, можете делать то, что делаете, и если свойства Name и Description являются уникальными для всего вашего типа, вы получите несколько реализаций. В этом нет ничего плохого, если я вас правильно понимаю.

0 голосов
/ 19 января 2009

Обычно это подход, который я использую. Я считаю, что требование подклассов переопределить виртуальное свойство или метод для возврата описательного идентификатора довольно просто и быстро. Я полагаю, что вы могли бы сделать что-то подобное, используя отражение, но вы наверняка получите удар по производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...