Поздно к игре, но FWIW ... этот проект на codeplex определил несколько "строго типизированных" скаляров, таких как угол, азимут, расстояние, широта, долгота, радиан и т. Д. Фактически, каждый из это структура с единственным скалярным членом и несколькими методами / свойствами / конструкторами для манипулирования ею «правильно». Не сильно отличается от того, что делает каждый из них классом, за исключением того факта, что это типы значений, а не ссылочные типы. Хотя я не использовал эту платформу, я вижу ценность того, чтобы сделать таких людей первоклассными гражданами.
Не знаю, является ли это в конечном счете хорошей идеей или нет, но кажется полезным иметь возможность писать код, подобный этому (аналогично вашему первоначальному примеру) с гарантией безопасности типов (и безопасности значений):
Angle a = new Angle(45); //45 degrees
SomeObject o = new SomeObject();
o.Rotate(a); //Ensure that only Angle can be sent to Rotate
или
Angle a = (Angle)45.0;
или
Radians r = Math.PI/2.0;
Angle a = (Angle)r;
Кажется, этот шаблон был бы наиболее полезен, если в вашем домене много скалярных «типов» со значениями семантики и потенциально много экземпляров этих типов. Моделирование каждого как структуры с одним скаляром дает очень компактное представление (сравнивая превращение каждого в полноценный класс). Хотя реализация этого уровня абстракции (а не просто использование «голых» скаляров для представления значений доменов) и дискретности может показаться затруднительной, результирующий API кажется гораздо проще использовать «правильно».