- 相關(guān)推薦
c#轉換關(guān)鍵詞explicit的使用
引導語(yǔ):C#適合為獨立和嵌入式的系統編寫(xiě)程序,從使用復雜操作系統的大型系統到特定應用的小型系統均適用。以下是小編整理的c#轉換關(guān)鍵詞explicit的使用,歡迎參考閱讀!
explicit 關(guān)鍵字用于聲明必須使用強制轉換來(lái)調用的用戶(hù)定義的類(lèi)型轉換運算符。例如,在下面的示例中,此運算符將名為 Fahrenheit 的類(lèi)轉換為名為 Celsius 的類(lèi):
C#
// Must be defined inside a class called Farenheit:
public static explicit operator Celsius(Fahrenheit f)
{
return new Celsius((5.0f / 9.0f) * (f.degrees - 32));
}
可以如下所示調用此轉換運算符:
C#
Fahrenheit f = new Fahrenheit(100.0f);
Console.Write("{0} fahrenheit", f.Degrees);
Celsius c = (Celsius)f;
轉換運算符將源類(lèi)型轉換為目標類(lèi)型。源類(lèi)型提供轉換運算符。與隱式轉換不同,必須通過(guò)強制轉換的方式來(lái)調用顯式轉換運算符。如果轉換操作可能導致異;騺G失信息,則應將其標記為 explicit。這可以防止編譯器無(wú)提示地調用可能產(chǎn)生無(wú)法預見(jiàn)后果的轉換操作。
省略此強制轉換將導致編譯時(shí)錯誤 編譯器錯誤 CS0266。
示例
下面的示例提供 Fahrenheit 和 Celsius 類(lèi),它們中的每一個(gè)都為另一個(gè)提供顯式轉換運算符。
C#
class Celsius
{
public Celsius(float temp)
{
degrees = temp;
}
public static explicit operator Fahrenheit(Celsius c)
{
return new Fahrenheit((9.0f / 5.0f) * c.degrees + 32);
}
public float Degrees
{
get { return degrees; }
}
private float degrees;
}
class Fahrenheit
{
public Fahrenheit(float temp)
{
degrees = temp;
}
// Must be defined inside a class called Farenheit:
public static explicit operator Celsius(Fahrenheit f)
{
return new Celsius((5.0f / 9.0f) * (f.degrees - 32));
}
public float Degrees
{
get { return degrees; }
}
private float degrees;
}
class MainClass
{
static void Main()
{
Fahrenheit f = new Fahrenheit(100.0f);
Console.Write("{0} fahrenheit", f.Degrees);
Celsius c = (Celsius)f;
Console.Write(" = {0} celsius", c.Degrees);
Fahrenheit f2 = (Fahrenheit)c;
Console.WriteLine(" = {0} fahrenheit", f2.Degrees);
}
}
/*
Output:
100 fahrenheit = 37.77778 celsius = 100 fahrenheit
*/
下面的示例定義一個(gè)結構 Digit,該結構表示單個(gè)十進(jìn)制數字。定義了一個(gè)運算符,用于將 byte 轉換為 Digit,但因為并非所有字節都可以轉換為 Digit,所以該轉換是顯式的。
C#
struct Digit
{
byte value;
public Digit(byte value)
{
if (value > 9)
{
throw new ArgumentException();
}
this.value = value;
}
// Define explicit byte-to-Digit conversion operator:
public static explicit operator Digit(byte b)
{
Digit d = new Digit(b);
Console.WriteLine("conversion occurred");
return d;
}
}
class ExplicitTest
{
static void Main()
{
try
{
byte b = 3;
Digit d = (Digit)b; // explicit conversion
}
catch (Exception e)
{
Console.WriteLine("{0} Exception caught.", e);
}
}
}
/*
Output:
conversion occurred
*/
【c#轉換關(guān)鍵詞explicit的使用】相關(guān)文章:
c#訪(fǎng)問(wèn)關(guān)鍵詞base的使用10-02
c#中預處理指令#if的使用08-18
c#檢測cpu使用率09-01
c#中訪(fǎng)問(wèn)關(guān)鍵詞 this 的常用用途08-27
c#中預處理指令#line的使用05-20
c#查詢(xún)關(guān)鍵字之into的使用07-25
c#運算符關(guān)鍵字is的使用10-30