using System; namespace Models; /// /// 属性值类型 /// 封装了整型数值,提供最大值限制(100)和显示转换。 /// public class PropertyValue { public const int Min = 0; public const int Max = 100; private float _value; /// /// 获取或设置当前值。 /// 设置时会自动限制在 [Min, Max] 范围内。 /// public float Value { get => _value; set { _value = value; if (_value > Max) _value = Max; if (_value < Min) _value = Min; } } public PropertyValue(int value) { Value = value; } public PropertyValue(float value) { Value = value; } public PropertyValue() : this(0) { } /// /// 获取显示值 (Value / 100.0f) /// public int Display() => (int)_value; public override string ToString() { return Display().ToString(); } // --- 隐式转换 (实现“重载等号”效果) --- // 允许 int 直接赋值给 PropertyValue (创建新实例) public static implicit operator PropertyValue(int value) { return new PropertyValue(value); } // 允许 int 直接赋值给 PropertyValue (创建新实例) public static implicit operator PropertyValue(float value) { return new PropertyValue(value); } // 允许 PropertyValue 像 int 一样使用 public static implicit operator int(PropertyValue p) { return (int)p._value; } // 允许 PropertyValue 像 float 一样使用 public static implicit operator float(PropertyValue p) { return p._value; } // --- 运算符重载 (支持 int 计算) --- public static PropertyValue operator +(PropertyValue a, int b) => new(a._value + b); public static PropertyValue operator +(int a, PropertyValue b) => new(a + b._value); public static PropertyValue operator -(PropertyValue a, int b) => new(a._value - b); public static PropertyValue operator -(int a, PropertyValue b) => new(a - b._value); public static PropertyValue operator *(PropertyValue a, int b) => new(a._value * b); public static PropertyValue operator *(int a, PropertyValue b) => new(a * b._value); public static PropertyValue operator /(PropertyValue a, int b) { return b == 0 ? throw new DivideByZeroException() : new PropertyValue(a._value / b); } public static PropertyValue operator /(int a, PropertyValue b) { return b._value == 0 ? throw new DivideByZeroException() : new PropertyValue(a / b._value); } // --- 运算符重载 (支持 float 计算) --- public static PropertyValue operator +(PropertyValue a, float b) => new(a._value + b); public static PropertyValue operator +(float a, PropertyValue b) => new(a + b._value); public static PropertyValue operator -(PropertyValue a, float b) => new(a._value - b); public static PropertyValue operator -(float a, PropertyValue b) => new(a - b._value); public static PropertyValue operator *(PropertyValue a, float b) => new(a._value * b); public static PropertyValue operator *(float a, PropertyValue b) => new(a * b._value); public static PropertyValue operator /(PropertyValue a, float b) => new(a._value / b); public static PropertyValue operator /(float a, PropertyValue b) => new(a / b._value); // --- 运算符重载 (PropertyValue 之间) --- public static PropertyValue operator +(PropertyValue a, PropertyValue b) => new(a._value + b._value); public static PropertyValue operator -(PropertyValue a, PropertyValue b) => new(a._value - b._value); public static PropertyValue operator *(PropertyValue a, PropertyValue b) => new(a._value * b._value); public static PropertyValue operator /(PropertyValue a, PropertyValue b) { return b._value == 0 ? throw new DivideByZeroException() : new PropertyValue(a._value / b._value); } }