17

OK、それは不可能だと知っていますが、それが質問のタイトルを作成するための最良の方法でした。問題は、(決定論的シミュレーションのために)floatの代わりに独自のカスタムクラスを使用しようとしていることです。構文をできるだけ近づけたいと考えています。だから、私は確かに次のようなものを書くことができるようになりたいです

FixedPoint myNumber = 0.5f;

出来ますか?

4

4 に答える 4

33

FixedPointはい、このクラスがあなたによって書かれたかどうかのための暗黙の型キャスト演算子を作成することによって。

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

doubleaをに変換できることがリーダー/コーダーに明らかでない場合は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

Implicitが=オーバーロードで必要なものでない場合、他のオプションは、以下のようなクラスで明示的な演算子を使用することです。これは、ユーザーに理解されるようにキャストされます。

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 に答える
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 に答える