Я не знаю, применимо ли это в вашем случае, но иногда люди хотят сделать то, что составляет «специализированные» скалярные / примитивные типы.
Например, см. Некоторые типы, определенные в этого проекта кодового комплекса .Некоторые из типов включают в себя Широту, Долготу, Угол и т. Д. Каждый из этих типов на самом деле является структурой с одним элементом данных, обычно с двойным, с плавающей запятой или int / long, например:
public struct Latitude : IFormattable, IComparable<Latitude>, IEquatable<Latitude>
{
private readonly double _DecimalDegrees;
//Some constants
//Some constructors
//Some static fields like...
public static readonly Latitude Equator = new Latitude(0.0);
public static readonly Latitude TropicOfCapricorn = new Latitude(-23.5);
public static readonly Latitude TropicOfCander = new Latitude(23.5);
//Some operators
public static Latitude operator +(Latitude left, Latitude right)
{
return new Latitude(left.DecimalDegrees + right.DecimalDegrees);
}
public static Latitude operator +(Latitude left, double right)
{
return new Latitude(left.DecimalDegrees + right);
}
}
Технически эти типы являются просто классом или структурами (в основном структурами в случае связанного проекта), но они используются для представления значений, которые часто (обычно?, Почти всегда?) Просто скалярными значениями.Если у вас есть объект со свойством Angle, большинство людей, вероятно, просто сделают его двойным.
public MyObject
{
public double AngleInDegrees { set; get; }
}
Когда значение присваивается AngleInDegrees, MyObject может захотеть выполнить некоторую обработку:
public double AngleInDegrees
{
get
{
return _AngleInDegrees;
}
set
{
if (value < 0 || value > 360)
{
_AngleInDegrees = NormalizeAngle(value);
}
else
{
_AngleInDegrees = value;
}
}
}
Что если у вас есть свойство AngleInDegrees для многих объектов?Что если у вас есть класс, который использует углы, создаваемые другими компонентами в вашем приложении?Кто должен сделать проверку?Полезно иметь возможность рассчитывать на постоянную работу с «хорошими» углами?
Имея тип AngleInDegrees, становится возможным помещать все валидационные и специальные операции «Угол» в тип.Кроме того, становится возможным строго указать все места, где вы хотите использовать AngleInDegrees.
Как я уже сказал, я не знаю, пытаетесь ли вы достичь этого или нет.Когда я прочитал ваш вопрос, мне пришло в голову, что у меня возникла такая же мысль, когда я впервые увидел проект, который я связал (т.е. мне казалось, что они фактически подклассируют примитивные типы данных для создания более ограничительных примитивных типов).).