首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 方法多載解析陷阱:當 null 遇到多個相容型別時的編譯錯誤 (第 5 部分)

     編輯:關於C語言

程式碼情境

static void Main()
{
    Show(null);
    Show("");
    Show(1);
}

static void Show(string s) { Console.WriteLine("String"); }
static void Show(object o) { Console.WriteLine("Object"); }
static void Show(Program p) { Console.WriteLine("Program"); } // Program 為目前類別

編譯結果

無法編譯,錯誤發生在 Show(null)。

原因分析

  1. null 同時相容於 string、Program (皆為 object 衍生類別)。
  2. 編譯器依「最精確匹配」原則:string 比 object 精確,故單獨存在 Show(string)/Show(object) 時會選 string。
  3. 但加入 Show(Program) 後,string 與 Program 之間無繼承關係,編譯器無法判斷哪個更精確,導致模糊錯誤 (CS0453)。

解決方式

  • 明確轉型:Show((string)null) 或 Show((Program)null)。
  • 避免為無關類別定義相同參數位置的多載。
  • 使用具名參數或不同方法名稱區分語意。

補充說明

本系列著重淺顯解釋基礎理論,歡迎交流心得。因垃圾信過多,請透過 CSDN 好友聯繫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved