我们常用的数值类型有int、uint、short、long、float、double,假定有某种特殊的需要,需要一种仅可以赋值为整数或0.5倍数的数值类型,这时常用的数值类型就用不了了。这时我们可以自定义一种新的数值类型来适应这种需求,比如我们将其命名为“半整型”。
半整型,HalfInt,要实现这样的数值类型,则需要实现相应的加法、减法、乘法、除法、赋值、等于、不等于,这样在书写的时候才会方便。比如说
HalfInt a=10,
a+=3;
a-=2;
a*=4
a/=4;
if(a==10){
//to do something
}
要达到这样的目的,就得重载+、-、*、/、++、--、==、!=的运算符,而赋值没有运算符可以重载,需要使用隐式操作符函数implicit operator,具体的代码实现如下:
#region HalfInt
/// <summary>
/// 半整型,仅支持整数或者0.5的倍数
/// </summary>
public struct HalfInt
{
/// <summary>
/// 值
/// </summary>
private float _value;
public float Value
{
get { return _value; }
}
public HalfInt(int value)
{
_value = value;
}
public HalfInt(float value)
{
Validate(value);
_value = value;
}
public HalfInt(double value)
{
Validate(value);
_value = (float)value;
}
/// <summary>
/// 等号赋值
/// </summary>
/// <param name="value"></param>
public static implicit operator HalfInt(double value)
{
return new HalfInt(value);
}
#region + 加法
public static HalfInt operator +(HalfInt a, HalfInt b)
{
return new HalfInt(a.Value + b.Value);
}
public static HalfInt operator +(HalfInt a, int b)
{
return a + new HalfInt(b);
}
public static HalfInt operator +(float a, Hal