17

好的,我知道这是不可能的,但这是制定问题标题的最佳方式。问题是,我正在尝试使用我自己的自定义类而不是浮点数(用于确定性模拟),并且我希望语法尽可能接近。所以,我当然希望能够写出类似的东西

FixedPoint myNumber = 0.5f;

可能吗?

4

4 回答 4

33

FixedPoint是的,如果此类是由您编写的,则通过创建隐式类型转换运算符。

class FixedPoint
{
    public static implicit operator FixedPoint(double d)
    {
        return new FixedPoint(d);
    }
}

如果读者/编码人员不明白 adouble可以转换为FixedPoint,您也可以改用显式类型转换。然后你必须写:

FixedPoint fp = (FixedPoint) 3.5;
于 2012-10-31T12:44:42.850 回答
8

重载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;
于 2012-10-31T12:52:12.013 回答
1

创建隐式类型转换。

这是一个例子:

<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>;
}
于 2012-10-31T12:49:24.057 回答
1

如果在 = 重载中隐式不是您想要的,另一种选择是在您的类上使用显式运算符,如下所示,它将强制转换为它,使其被用户理解:

public static explicit operator FixedPoint(float oc)     
{         

     FixedPoint etc = new FixedPoint();          
     etc._myValue = oc;          
     return etc;      
}

... usage

FixedPoint myNumber = (FixedPoint)0.5f;
于 2012-10-31T12:50:30.923 回答