122 lines
4.0 KiB
C#
122 lines
4.0 KiB
C#
using System;
|
|
|
|
namespace Models;
|
|
|
|
/// <summary>
|
|
/// 属性值类型
|
|
/// 封装了整型数值,提供最大值限制(100)和显示转换。
|
|
/// </summary>
|
|
public class PropertyValue
|
|
{
|
|
public const int Min = 0;
|
|
public const int Max = 100;
|
|
|
|
private float _value;
|
|
|
|
/// <summary>
|
|
/// 获取或设置当前值。
|
|
/// 设置时会自动限制在 [Min, Max] 范围内。
|
|
/// </summary>
|
|
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) { }
|
|
|
|
/// <summary>
|
|
/// 获取显示值 (Value / 100.0f)
|
|
/// </summary>
|
|
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);
|
|
}
|
|
} |