c#轉換關鍵詞explicit的使用

引導語:C#適合爲獨立和嵌入式的系統編寫程序,從使用複雜操作系統的大型系統到特定應用的小型系統均適用。以下是小編整理的c#轉換關鍵詞explicit的使用,歡迎參考閱讀!

c#轉換關鍵詞explicit的使用

explicit 關鍵字用於聲明必須使用強制轉換來調用的用戶定義的類型轉換運算符。例如,在下面的示例中,此運算符將名爲 Fahrenheit 的類轉換爲名爲 Celsius 的'類:

C#

// Must be defined inside a class called Farenheit:

public static explicit operator Celsius(Fahrenheit f)

{

return new Celsius((5.0f / 9.0f) * (ees - 32));

}

可以如下所示調用此轉換運算符:

C#

Fahrenheit f = new Fahrenheit(100.0f);

e("{0} fahrenheit", ees);

Celsius c = (Celsius)f;

轉換運算符將源類型轉換爲目標類型。源類型提供轉換運算符。與隱式轉換不同,必須通過強制轉換的方式來調用顯式轉換運算符。如果轉換操作可能導致異常或丟失信息,則應將其標記爲 explicit。這可以防止編譯器無提示地調用可能產生無法預見後果的轉換操作。

省略此強制轉換將導致編譯時錯誤 編譯器錯誤 CS0266。

  示例

下面的示例提供 Fahrenheit 和 Celsius 類,它們中的每一個都爲另一個提供顯式轉換運算符。

C#

class Celsius

{

public Celsius(float temp)

{

degrees = temp;

}

public static explicit operator Fahrenheit(Celsius c)

{

return new Fahrenheit((9.0f / 5.0f) * ees + 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) * (ees - 32));

}

public float Degrees

{

get { return degrees; }

}

private float degrees;

}

class MainClass

{

static void Main()

{

Fahrenheit f = new Fahrenheit(100.0f);

e("{0} fahrenheit", ees);

Celsius c = (Celsius)f;

e(" = {0} celsius", ees);

Fahrenheit f2 = (Fahrenheit)c;

eLine(" = {0} fahrenheit", ees);

}

}

/*

Output:

100 fahrenheit = 37.77778 celsius = 100 fahrenheit

*/

下面的示例定義一個結構 Digit,該結構表示單個十進制數字。定義了一個運算符,用於將 byte 轉換爲 Digit,但因爲並非所有字節都可以轉換爲 Digit,所以該轉換是顯式的。

C#

struct Digit

{

byte value;

public Digit(byte value)

{

if (value > 9)

{

throw new ArgumentException();

}

e = value;

}

// Define explicit byte-to-Digit conversion operator:

public static explicit operator Digit(byte b)

{

Digit d = new Digit(b);

eLine("conversion occurred");

return d;

}

}

class ExplicitTest

{

static void Main()

{

try

{

byte b = 3;

Digit d = (Digit)b; // explicit conversion

}

catch (Exception e)

{

eLine("{0} Exception caught.", e);

}

}

}

/*

Output:

conversion occurred

*/