使用者定義的明確和隱含轉換運算元

使用者定義型別可以定義自定義的隱含或明確轉換,前提是相同的兩種類型之間不存在標準轉換。 隱含轉換不需要叫用特殊語法,而且可能發生在各種情況下,例如,在指派和方法調用中。 預先定義的 C# 隱含轉換一律會成功,而且永遠不會擲回例外狀況。 用戶定義的隱含轉換也應該以這種方式運作。 如果自定義轉換可以擲回例外狀況或遺失資訊,請將它定義為明確的轉換。

C# 語言參考資料記錄了 C# 語言最新版本。 同時也包含即將推出語言版本公開預覽功能的初步文件。

文件中標示了語言最近三個版本或目前公開預覽版中首次引入的任何功能。

小提示

欲查詢某功能何時首次在 C# 中引入,請參閱 C# 語言版本歷史的條目。

,因為運算符不會考慮使用者定義的轉換。 使用 轉換表達式 來叫用使用者定義的明確轉換。

operator分別使用 和 implicitexplicit 關鍵詞來定義隱含或明確轉換。 定義轉換的類型必須是來源類型或該轉換的目標類型。 你可以在兩種使用者自訂型態中定義轉換,任一型別都適用。

下列範例示範如何定義隱含和明確的轉換:

using System;

public readonly struct Digit
{
    private readonly byte digit;

    public Digit(byte digit)
    {
        if (digit > 9)
        {
            throw new ArgumentOutOfRangeException(nameof(digit), "Digit cannot be greater than nine.");
        }
        this.digit = digit;
    }

    public static implicit operator byte(Digit d) => d.digit;
    public static explicit operator Digit(byte b) => new Digit(b);

    public override string ToString() => $"{digit}";
}

public static class UserDefinedConversions
{
    public static void Main()
    {
        var d = new Digit(7);

        byte number = d;
        Console.WriteLine(number);  // output: 7

        Digit digit = (Digit)number;
        Console.WriteLine(digit);  // output: 7
    }
}

你可以定義 已檢查的 明確轉換運算子。 如需詳細資訊,請參閱算術運算子一文中的使用者定義的已檢查運算一節。

您也可以使用 operator 關鍵詞來多載預先定義的 C# 運算符。 如需詳細資訊,請參閱 運算元多載

C# 語言規格

如需詳細資訊,請參閱 C# 語言規格的下列幾節:

另請參閱