Скажем, у меня есть что-то вроде: Транспортные средства.
Под транспортными средствами у меня есть автомобили, грузовики и пикапы.
Под машинами У меня только BMW и Toyota.Класс или Enum для ограничения параметра функции на список допустимых значений C#
Теперь я хочу назвать что-то вроде:
if (NumberOfSeats(Vehicles.Cars.Toyota) {}
Так NumberOfSeats должно быть ограничено только получить BMW и Toyota:
public int NumberOfSeats(??) { return 4;}
Но это должно дать компиляции ошибки времени, если я позвоню:
if (NumberOfSeats(Vehicles.Cars.Yamaha) {}
Кроме того, мне хотелось бы, чтобы у BMW был метод, который вернет строковое значение (le t'say Name()
)
Должен ли мой классный состав смотреть на перечисления, классы, наследование или комбинацию?
Поставил бы 'NumberOfSeats' как виртуальную собственность объекта' Vehicle' решить вашу проблему? – dasblinkenlight
Можете ли вы объяснить, чего вы пытаетесь достичь. Я думаю, вам нужен абстрактный базовый класс 'Vehicle' с методом' NumberOfSeats'. Если это вопрос дизайна - лучше [программисты] (http://programmers.stackexchange.com/). –
Это выглядит как запах дизайна, а также как проблема [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Попытайтесь описать, чего вы пытаетесь достичь. –