Как создать новый тип в C#? Например, байт имеет диапазон от 0 до 255, но мне нужен новый тип, который будет иметь диапазон от 0 до 10.Как объявить новый тип
ответ
Удивительно, что люди хотят закрыть это как не настоящий вопрос!
Ответ заключается в том, что C# не имеет системы типов, которая поддерживает проверку целых диапазонов во время компиляции, за исключением нескольких встроенных случаев: она перестает назначать номера большего диапазона номерам меньшего диапазона. Но диапазоны для этих чисел заранее определены в спецификации языка.
Я согласен с тобой. Никто не дает правильного ответа и закрывающего вопроса, не понимая, что я прошу и даже не отвечу на этот вопрос. – Tomas
Вы создаете класс, который обертывает byte
(или int
, если вам нужен больший диапазон).
Затем вы определяете обычные операции - *, /, - ... Для этого вы можете использовать перегрузку оператора.
Вы добавляете некоторые проверки, чтобы увидеть, остается ли значение в пределах границ и в противном случае выбрасывать соответствующее исключение.
Вот краткий пример:
class LimitedRangeValue
{
private static readonly int maxval = 10;
private static readonly int minval = 0;
private int n;
public LimitedRangeValue(int n)
{
if (n < minval || n > maxval)
throw new OverflowException();
this.n = n;
}
public static LimitedRangeValue operator +(LimitedRangeValue r1, LimitedRangeValue r2)
{
return new LimitedRangeValue(r1.n + r2.n);
}
// Other operators by analogy
public override string ToString()
{
return n.ToString();
}
}
EDIT: Как Barber указывает @ Андрей в комментариях, вы можете использовать код контракты для (за дополнительную плату) проверки.
Я думаю, вы обнаружите, что C# * имеет * перегрузку оператора ... http://msdn.microsoft.com/en-us/library/8edha89s%28VS.71%29.aspx –
@BradleySmith Спасибо! Не знал этого; соответственно изменили ответ. –
- 1. Как объявить новый сложный тип переменной
- 2. Как объявить новый тип частичной функции в Scala
- 3. Как объявить перечисление как тип?
- 4. Отправить новый тип как параметр
- 5. Drools: Невозможно объявить новый тип (с полем) в .drl файле
- 6. Как объявить тип импорта TypeScript *?
- 7. Тип. Как объявить коллекцию DOM?
- 8. Как объявить тип предпочтений Android?
- 9. Как объявить тип этой функции?
- 10. Как объявить тип скалярной таблицы?
- 11. Typcript Как объявить тип подкласса?
- 12. Объявить компонент [x] Тип
- 13. Объявить произвольный тип данных
- 14. Объявить общий тип переменной
- 15. Новый тип объявления функций?
- 16. Как публично объявить новый рубиновый камень?
- 17. Объявить новый класс из переменной в Java
- 18. Как объявить тип как nullable в TypeScript?
- 19. Определить новый тип памяти
- 20. Объявить тип делегата в Typcript
- 21. Объявить именованный тип, например, словарь
- 22. MATLAB объявить собственный тип данных
- 23. C++: вперед объявить тип Защиту
- 24. Использование decltype объявить тип возвращаемого
- 25. Как объявить тип возвращаемого группировки Linq запрос
- 26. Как объявить тип карты в машинописном тексте?
- 27. Как объявить тип процесса с помощью Procfile?
- 28. Как объявить тип для каждого аргумента макроса?
- 29. Как объявить тип свойства динамического объекта?
- 30. Объявить глобальную переменную Writecript как тип «module»
Как обычно вы создаете новый тип? public class blah .... Создание нового типа для этого кажется довольно бессмысленным ... –
Вы уверены, что вам нужен новый тип, а не только проверка ввода? –
Как установить проверку диапазона и проверку типов во время компиляции? Например, я не могу установить строку для байтового типа, я получаю ошибку компиляции. Как сделать то же самое для моего типа? – Tomas