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);
}
}