轉換運算子
轉換運算子會將物件從一個型別轉換成另一個型別; 轉換運算子可以是隱含或明確的。 隱含轉換運算子不需要在原始程式碼中指定型別轉換,也可以執行轉換。 明確轉換運算子需要在原始程式碼中有型別轉換,才可執行轉換。
下列簽章將顯示 Point 類別的明確轉換運算子,以便在 Point 和 Size 之間進行轉換。
[Visual Basic]
Public Shared Function op_Explicit( _
ByVal p As Point _
) As Size
[C#]
public static Size op_Explicit(
Point p
);
如果使用者並未明確預期有這類轉換,請勿提供轉換運算子。
理想狀況下,應該有客戶研究資料來支援轉換運算子的定義。 另外,定義此運算子的支援可以是範例的形式,其中有一個或多個類似的型別需要這類轉換。
不要在型別的定義域之外定義轉換運算子。
例如,Int32、Double 和 Decimal 都是數字型別,而 DateTime 則不是。 將 Double 型別轉換成 DateTime 型別的作業不應該以轉換運算子的形式來實作, 請使用建構函式將一個型別轉換成不在相同定義域中的另一個型別。
如果轉換可能會有耗損的情況,請不要提供隱含轉換運算子。
例如,從 Double 到 Single 之間不應該有隱含轉換,因為 Double 的精確度高於 Single。 可以提供明確轉換運算子來進行這種耗損的轉換。
不要從隱含轉型擲回例外狀況。
隱含轉型是由系統所呼叫;使用者可能不會察覺正在進行轉換,所以很難去偵錯程式碼。
如果呼叫轉型運算子會產生耗損的轉換,而此運算子的合約不允許有耗損的轉換,則要擲回 System.InvalidCastException。
Portions Copyright 2005 Microsoft Corporation. All rights reserved.
Portions Copyright Addison-Wesley Corporation. All rights reserved.
設計指引的詳細資訊,請參閱"框架設計準則:公約、 成語和可重複使用的模式。網路圖書館"書 Krzysztof Cwalina 和布拉德 · 艾布拉姆斯,2005年艾迪生 - 衛斯理,發表。