explicit關鍵字用於宣告必須使用強制轉換來呼叫的使用者定義的型別轉換運算子。例如,在下面的示例中,此運算子將名為 fahrenheit 的類轉換為名為 celsius 的類:
// must be defined inside a class called farenheit:public static explicit operator celsius(farenheit f)
可以如下所示呼叫此轉換運算子:
farenheit f = new farenheit(100.0f);celsius c = (celsius)f;
轉換運算子將源型別轉換為目標型別。源型別提供轉換運算子。與隱式轉換不同,必須通過強制轉換的方式來呼叫顯式轉換運算子。如果轉換操作可能導致異常或丟失資訊,則應將其標記為explicit。這可以防止編譯器無提示地呼叫可能產生無法預見後果的轉換操作。
省略此強制轉換將導致編譯時錯誤編譯器錯誤 cs0266。
有關更多資訊,請參見使用轉換運算子(c# 程式設計指南)。
下面的示例提供 fahrenheit 和 celsius 類,它們中的每乙個都為另乙個提供顯式轉換運算子。
// cs_keyword_explicit_temp.csusing system;
class celsius
public static explicit operator fahrenheit(celsius c)
public float degrees
}private float degrees;
}class fahrenheit
public static explicit operator celsius(fahrenheit f)
public float degrees
}private float degrees;
}class mainclass
fahrenheit", f.degrees);
celsius c = (celsius)f;
console.write(" = celsius", c.degrees);
fahrenheit f2 = (fahrenheit)c;
console.writeline(" = fahrenheit", f2.degrees);
}}
輸出
100 fahrenheit = 37.77778 celsius = 100 fahrenheit下面的示例定義乙個結構 digit,該結構表示單個十進位制數字。定義了乙個運算子,用於將 byte 轉換為 digit,但因為並非所有位元組都可以轉換為digit,所以該轉換是顯式的。
// cs_keyword_explicit_2.csusing system;
struct digit
this.value = value;
}// define explicit byte-to-digit conversion operator:
public static explicit operator digit(byte b)
}class mainclass
catch (exception e)
exception caught.", e);}}
}
輸出
conversion occurred
C 學習筆記 explicit關鍵字
c 中的explicit 關鍵字用來修飾類的建構函式,表明該建構函式是顯式的,既然有 顯式 那麼必然就有 隱式 那麼什麼是顯示而什麼又是隱式的呢?如果c 類的建構函式有乙個引數,那麼在編譯的時候就會有乙個預設的轉換操作 將該建構函式對應資料型別的資料轉換為該類物件,如下面所示 class mycla...
C 學習筆記之explicit關鍵字
explicit關鍵字的作用是用來修飾類的建構函式,表明該建構函式是顯式的,禁止單引數建構函式的隱式轉換。假如沒有explicit class myclassa class myclassb myclassa obj1 myclassb obj2 obj2 obj1 實際上發生如下隱式轉換 mycl...
C 的explicit關鍵字
c 的explicit關鍵字 c 中的explicit關鍵字用來修飾類的建構函式,表明該建構函式是顯式的,既然有 顯式 那麼必然就有 隱式 那麼什麼是顯示而什麼又是隱式的呢?如果c 類的建構函式有乙個引數,那麼在編譯的時候就會有乙個預設的轉換操作 將該建構函式對應資料型別的資料轉換為該類物件,如下面...