如何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;
}
}
現在把帳戶這一塊的用法碼:
Number n1 = 5;
Number n2 = 10;
Number n3 = n1 + n2;
N3計算結果爲15!這也會發生在其他操作員身上!
這是因爲你已經定義了隱式運算符float,所以'+'運算符會隱式地將你的值從'Number'轉換爲'float'('System.Single'),執行加法,然後轉換回來。 – Dai
難道你甚至不嘗試在隱式運算符中放置一個斷點,這是唯一可能的原因嗎? – Andrew
@Andrew我是c#的新手。我的背景是C++,它不能隱式地處理這種情況。所以不知道類型,因爲**數字**可以轉換爲浮點數,它使用浮點數?我爲另一個自定義類放置了其他轉換運算符,但它再次使用了浮點運算符。編譯器如何選擇要提供算術運算符的轉換? – Klaus