Я нашел много подобных сообщений о смежных вопросах, этот ответ taylonr пришел близко, но не совсем ответил на мой сценарий.Как я могу создать это лучше, используя принципы OO и SOLID?
Предположим, у меня есть интерфейс:
public interface IShape
{
decimal GetArea();
}
Я затем создать 3-х классов с помощью этого интерфейса
public class Rectangle : IShape
{
public decimal GetArea()
{
...
}
}
public class Triangle : IShape
{
public decimal GetArea()
{
...
}
}
public class Circle : IShape
{
public decimal GetArea()
{
...
}
}
теперь я хочу добавить int GetNumberOfSides()
функцию (или какой-либо другой функции, которая имеет отношение только к некоторые из моих IShape). Очевидно, это не относится к классу Circle. Если бы у меня тогда были объекты List<IShape>
и вы захотели выполнить итерацию по вызову этой функции в соответствующих IShapes, как бы вы использовали объектно-ориентированные принципы проектирования для решения этой проблемы?
Я мог бы добавить логическое значение для моего интерфейса IShape bool HasSides { get; set; }
и запустить любую логику этого, однако мне нужно было бы передать конкретный класс, чтобы получить доступ к функции GetNumberOfSides()
. Я знаю, что это неправильно, поскольку это не так, но я не знаю, как это сделать.
Я думал о наличии другого интерфейса ISidedShape
, который унаследовал от IShape
, но затем вернулся к повторению моего списка, как бы я узнал, какая из фигур имеет этот конкретный метод?
Любая помощь будет высоко оценена.
Благодаря
Не может ли 'Circle' просто« возвращать 0; »для количества сторон? Как насчет других нечетных фигур, таких как полукруг? Это будет законно иметь 1 «сторону», а также 1 «нечто иное, чем сторона, в зависимости от того, как вы определяете сторону». Может быть, «сторона» - это не тот термин, который вы ищете? С более подходящим названием для термина, моделирование может иметь больше смысла. – David
Мой пример, возможно, не был лучшим. Я пытался найти пример, не используя мой фактический сценарий, который потребует других знаний. Я получаю вашу мысль о возврате 0, но это тоже не так. – user1244893
Почему он не чувствует себя хорошо? Это совершенно логично. – jrahhali