演算子がオーバーロードされていないクラスの+、 - 、*、/演算子はどのように定義されますか?私は次のクラスを実装しました。オペレータに過負荷をかけることなく、上記の演算子が動作し、実装する方法で動作します。C#のデフォルトの算術演算子
class Number
{
private float mDecimal;
public float Decimal
{
get { return mDecimal; }
}
private int mOrder;
public int Order
{
get { return mOrder; }
}
public Number(float dec, int pow)
{
mDecimal = dec;
mOrder = pow;
}
public Number Power(Number number)
{
throw new NotImplementedException();
}
public static implicit operator Number(float num)
{
int pow = 0;
while (num > 1000)
{
num *= 0.1f;
++pow;
}
return new Number(num, pow);
}
public static implicit operator float(Number num)
{
float result = num.mDecimal;
for (int i = 0; i < num.mOrder; ++i)
result *= 10;
return result;
}
}
今すぐアカウントに使用コードのこの部分を取る:は15と評価さ
Number n1 = 5;
Number n2 = 10;
Number n3 = n1 + n2;
N3 は、ここでは、コードです!これは他の演算子でも起こります!次のように
'implicit operator float'を定義しているので、' + '演算子は暗黙的に値を' Number'から 'float'(' System.Single')に暗黙的に変換し、加算を実行してから、 。 – Dai
暗黙の演算子にブレークポイントを配置しようとしたことはありませんでした。 – Andrew
@Andrew私はC#を初めて使っています。私の背景は暗黙のうちにこの種の状況を処理しないC++です。だから型を知らなくても、** Number **は浮動小数点に変換できるので、浮動小数点数を使用しますか?別のカスタムクラスのために他の変換演算子を配置しましたが、浮動小数点演算子を再度使用します。コンパイラは算術演算子を提供するためにどのような変換を行うかをどのように選択しますか? – Klaus