天天看點

C# explicit 和 implicit 淺析

作者:步伐科技

在 C# 中,explicit 和 implicit 是用于類型轉換的關鍵字。

  1. explicit(顯式):explicit 關鍵字用于定義一個顯式的類型轉換運算符,它允許在不同類型之間進行強制轉換,但是需要使用顯式的類型轉換文法進行調用。

下面是一個具體的示例:

class Distance
{
    public double Feet { get; }

    public Distance(double feet)
    {
        Feet = feet;
    }
    
    public static explicit operator int(Distance distance)
    {
        // 将距離轉換為整數
        return (int)distance.Feet;
    }
}

Distance distance = new Distance(12.5);
int feet = (int)distance;  // 使用顯式類型轉換

Console.WriteLine(feet);  // 輸出:12           

在這個示例中,Distance 類表示距離,有一個名為 Feet 的屬性。然後,我們定義了一個顯式的類型轉換運算符 explicit operator int(Distance distance),它将距離轉換為整數。

當我們通過 (int)distance 進行轉換時,需要使用顯式類型轉換文法,并且會調用我們定義的顯式轉換運算符。在輸出結果中,距離被顯式轉換為整數,輸出為 12。

  1. implicit(隐式):implicit 關鍵字用于定義一個隐式的類型轉換運算符,它允許在不同類型之間進行隐式轉換,編譯器會自動根據上下文來判斷合适的轉換。

下面是一個具體的示例:

class Temperature
{
    public double Celsius { get; }

    public Temperature(double celsius)
    {
        Celsius = celsius;
    }
    
    public static implicit operator Fahrenheit(Temperature temperature)
    {
        // 将攝氏度轉換為華氏度
        double fahrenheit = (temperature.Celsius * 9 / 5) + 32;
        return new Fahrenheit(fahrenheit);
    }
}

class Fahrenheit
{
    public double Value { get; }

    public Fahrenheit(double value)
    {
        Value = value;
    }
}

Temperature temperature = new Temperature(25);
Fahrenheit fahrenheit = temperature;  // 使用隐式類型轉換

Console.WriteLine(fahrenheit.Value);  // 輸出:77           

在這個示例中,Temperature 類表示溫度,有一個名為 Celsius 的屬性。然後,我們定義了一個隐式的類型轉換運算符 implicit operator Fahrenheit(Temperature temperature),它将攝氏度轉換為華氏度。

當我們将 temperature 指派給 fahrenheit 變量時,由于存在隐式轉換運算符且滿足轉換條件,編譯器會自動進行隐式類型轉換,并将攝氏度轉換為華氏度。在輸出結果中,華氏度被隐式轉換并指派給了 fahrenheit.Value,輸出為 77。

總結起來,explicit 和 implicit 關鍵字是用于定義類型轉換運算符的關鍵字。使用 explicit 關鍵字定義的轉換運算符需要使用顯式類型轉換文法進行調用,而使用 implicit 關鍵字定義的轉換運算符則可以通過隐式類型轉換進行自動調用。

選擇使用 explicit 還是 implicit 關鍵字時,可以根據以下準則進行考慮:

  1. 使用 explicit(顯式)轉換:
  • 當類型之間的轉換存在一定的風險或可能導緻資料丢失時,應該使用顯式轉換。顯式轉換要求使用者明确知道可能存在的潛在風險,并且需要使用顯式類型轉換文法來調用轉換運算符。
  • 當類型之間的轉換可能引起混淆或造成不一緻性時,使用顯式轉換可以提醒開發者進行必要的類型轉換,以避免錯誤。
  • 當轉換操作需要一些額外的邏輯處理或複雜的轉換過程時,使用顯式轉換可以更清晰地表達轉換的意圖。
  1. 使用 implicit(隐式)轉換:
  • 當類型之間的轉換是安全的,不會導緻資料丢失或不一緻性時,可以使用隐式轉換。隐式轉換可以讓代碼更簡潔和易讀。
  • 當轉換操作是常見的且預期的,不需要額外的邏輯處理時,可以使用隐式轉換。
  • 當轉換操作是一種自然的、合理的映射關系,不會引起歧義時,可以使用隐式轉換。

需要注意的是,無論選擇使用 explicit 還是 implicit,都應該確定轉換操作是明晰和可預測的,并遵循良好的程式設計實踐。适當地選擇使用合适的轉換關鍵字可以提高代碼的可讀性和可維護性,并減少潛在的錯誤。

創作不易,如果您喜歡還請幫忙點贊關注,謝謝![作揖]

繼續閱讀