好的,我知道这是不可能的,但这是制定问题标题的最佳方式。问题是,我正在尝试使用我自己的自定义类而不是浮点数(用于确定性模拟),并且我希望语法尽可能接近。所以,我当然希望能够写出类似的东西
FixedPoint myNumber = 0.5f;
可能吗?
好的,我知道这是不可能的,但这是制定问题标题的最佳方式。问题是,我正在尝试使用我自己的自定义类而不是浮点数(用于确定性模拟),并且我希望语法尽可能接近。所以,我当然希望能够写出类似的东西
FixedPoint myNumber = 0.5f;
可能吗?
FixedPoint
是的,如果此类是由您编写的,则通过创建隐式类型转换运算符。
class FixedPoint
{
public static implicit operator FixedPoint(double d)
{
return new FixedPoint(d);
}
}
如果读者/编码人员不明白 adouble
可以转换为FixedPoint
,您也可以改用显式类型转换。然后你必须写:
FixedPoint fp = (FixedPoint) 3.5;
重载implicit
强制转换运算符:
class FixedPoint
{
private readonly float _floatField;
public FixedPoint(float field)
{
_floatField = field;
}
public static implicit operator FixedPoint(float f)
{
return new FixedPoint(f);
}
public static implicit operator float(FixedPoint fp)
{
return fp._floatField;
}
}
所以你可以使用:
FixedPoint fp = 1;
float f = fp;
创建隐式类型转换。
这是一个例子:
<class> instance = new <class>();
float f = instance; // We want to cast instance to float.
public static implicit operator <Predefined Data type> (<Class> instance)
{
//implicit cast logic
return <Predefined Data type>;
}
如果在 = 重载中隐式不是您想要的,另一种选择是在您的类上使用显式运算符,如下所示,它将强制转换为它,使其被用户理解:
public static explicit operator FixedPoint(float oc)
{
FixedPoint etc = new FixedPoint();
etc._myValue = oc;
return etc;
}
... usage
FixedPoint myNumber = (FixedPoint)0.5f;