Минимальное значение свойства интерфейса C#

Есть ли способ установить минимальное значение для свойства в интерфейсе, поэтому мне не нужно устанавливать его в каждом классе, который я использую в этом интерфейсе? Например, я хотел бы, чтобы ниже код установил минимальное значение для высоты = 0.

{
    internal interface IAltitude
    {
        int altitude { get; set; }
    }
}

Я пробовал что-то подобное, но это не работает.

  internal interface IAltitude
    {
        int altitude { get{ return altitude; } set { if (altitude < 0)
                {
                    altitude = 0;
                }
            } 
        }
    }

отделить валидацию - тогда валидацию можно будет использовать в каждом классе - там много OS libs

Jazb 29.03.2022 09:38

Интерфейс не имеет бизнес-логики, такой как проверка аргументов. Бизнес-логика реализована в классы.

MakePeaceGreatAgain 29.03.2022 09:47

Почему бы не использовать uint?

shingo 29.03.2022 10:12

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

Amit 29.03.2022 10:17
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Нет, реализовать код в интерфейсах невозможно, вам придется написать абстрактный базовый класс.

Начиная с C# 8 можно предоставлять реализации по умолчанию в интерфейсах, однако невозможно объявить поле. Интерфейсы по умолчанию.

Можно было бы использовать uint для высоты, тогда отрицательные значения были бы невозможны. Но если вам нужна какая-либо проверка диапазона, лучше использовать какой-либо атрибут ValidationAttribute, например. Проверка диапазона

Другие вопросы по теме