OK、それは不可能だと知っていますが、それが質問のタイトルを作成するための最良の方法でした。問題は、(決定論的シミュレーションのために)floatの代わりに独自のカスタムクラスを使用しようとしていることです。構文をできるだけ近づけたいと考えています。だから、私は確かに次のようなものを書くことができるようになりたいです
FixedPoint myNumber = 0.5f;
出来ますか?
OK、それは不可能だと知っていますが、それが質問のタイトルを作成するための最良の方法でした。問題は、(決定論的シミュレーションのために)floatの代わりに独自のカスタムクラスを使用しようとしていることです。構文をできるだけ近づけたいと考えています。だから、私は確かに次のようなものを書くことができるようになりたいです
FixedPoint myNumber = 0.5f;
出来ますか?
FixedPoint
はい、このクラスがあなたによって書かれたかどうかのための暗黙の型キャスト演算子を作成することによって。
class FixedPoint
{
public static implicit operator FixedPoint(double d)
{
return new FixedPoint(d);
}
}
double
aをに変換できることがリーダー/コーダーに明らかでない場合は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;
Implicitが=オーバーロードで必要なものでない場合、他のオプションは、以下のようなクラスで明示的な演算子を使用することです。これは、ユーザーに理解されるようにキャストされます。
public static explicit operator FixedPoint(float oc)
{
FixedPoint etc = new FixedPoint();
etc._myValue = oc;
return etc;
}
... usage
FixedPoint myNumber = (FixedPoint)0.5f;
暗黙の型キャストを作成します。
これは例です:
<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>;
}