在類型轉換時常會遇到隱式轉換和顯式轉換。那我們自定義的類型要如何去定義隱式轉換和顯式轉換?我們來看一段代碼
public class Rational
{
private Int32 _inner_int = 0;
public Rational()
{
}
public Rational(Int32 num)
{
this._inner_int = num;
}
public Int32 ToInt32() { return this._inner_int; }
// Implicitly constructs and returns a Rational from an Int32
public static implicit operator Rational(Int32 num)
{
return new Rational(num);
}
// Explicitly returns an Int32 from a Rational
public static explicit operator Int32(Rational r)
{
return r.ToInt32();
}
public override string ToString()
{
//return base.ToString();
String s = String.Format("{0}", this._inner_int);
return s;
}
}
測試代碼
class Program
{
static void Main(string[] args)
{
Rational r1 = 10;
Console.WriteLine(r1);
Int32 i = r1;
Console.WriteLine(i);
Console.ReadLine();
}
}
這時編輯會報錯,見下圖
從提示可以看到,是因為Int32 i=r1時缺少了顯式轉換。現在我們添加顯示轉換,修改後的代碼及輸出結果如下:
結果正常輸出為10.
那為什麼會這樣呢?究其原因是在Rational轉換成 Int32時,指定了explicit(顯式的),所以必須要指定轉換類型Int32。如果將explicit換成implicit(隱式),原來的代碼將可以正常運行。
修改後的Rational
public class Rational
{
private Int32 _inner_int = 0;
public Rational()
{
}
public Rational(Int32 num)
{
this._inner_int = num;
}
public Int32 ToInt32() { return this._inner_int; }
// Implicitly constructs and returns a Rational from an Int32
public static implicit operator Rational(Int32 num)
{
return new Rational(num);
}
// Explicitly returns an Int32 from a Rational
public static <span >implicit</span> operator Int32(Rational r)
{
return r.ToInt32();
}
public override string ToString()
{
//return base.ToString();
String s = String.Format("{0}", this._inner_int);
return s;
}
}
測試代碼及輸出結果
可見explicit和implicit影響著類型的顯式轉換和隱式轉換。
其實在Rational r1=10已經執行了隱式轉換,對應的轉換代碼如下:
// Implicitly constructs and returns a Rational from an Int32
public static implicit operator Rational(Int32 num)
{
return new Rational(num);
}
如果將implicit換成explicit,Rational r1=10也將會報錯(可以自行測試)。
C#多線程編程實例 線程與窗體交互【附源碼】 http://www.linuxidc.com/Linux/2014-07/104294.htm
C#數學運算表達式解釋器 http://www.linuxidc.com/Linux/2014-07/104289.htm
在C語言中解析JSON配置文件 http://www.linuxidc.com/Linux/2014-05/101822.htm
C++ Primer Plus 第6版 中文版 清晰有書簽PDF+源代碼 http://www.linuxidc.com/Linux/2014-05/101227.htm