- Создание нового класса, где в конструктор можно передавать массив параметров
public UnknownShape(params double[] dims)
{
Dimensions = dims.ToList().AsReadOnly();
}
Стоит заметить, что конечный пользователь должен сам понимать какие измерения стоит перемножать, и передавать именно их в конструктор.
- Создать статичный метод в абстрактном классе (
Shape
)
public static double CalculateArea(params double[] dims)
{
if (Array.TrueForAll(dims, double.IsNormal) && dims.All(x => x > 0))
{
return dims.Aggregate(1.0, (current, dim) => current * dim);
}
throw new ArgumentException("The provided dimensions are invalid.");
}
В данный функционал, на мой взгляд, можно добавить еще пару фич:
- Сделать свои Exception'ы, которые будут более точно описывать ошибку (валидировать данные)
- Перегрузить метод, если выбирать второй вариант (Создание статичного метода в абстрактном классе (
Shape
)) - Добавить больше Shape'ов, больше конструкторов в уже имеющиеся (вычисление площадей исходя из других данных)
- Мне кажется, что можно сделать вычисление анонимной фигуры на делегатах (
delegate
,Func<T>
,Action<T>
)