程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#中方法重載詳解(5)

C#中方法重載詳解(5)

編輯:關於C語言

下面我們對第二種 情況的代碼做一些變化,代碼如下:

using System;
using System.Collections.Generic;
using System.Text;
namespace OverrideDemo
{
  /// <summary>
  /// 說明:本實例用於講 述重載的關系
  /// 作者:周公
  /// 日期:2008-09-04
  /// 首發地址:http://blog.csdn.Net/zhoufoxcn
  /// </summary>
   class Program
  {
    static void Main(string[] args)
     {
      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)//Program是當前方法所在的類
    {
       Console.WriteLine("Program");
    }
  }
}

上面的代碼的運行結果是什麼,你能猜出來嗎?

哈哈,上面的程序代 碼是沒有運行結果的,因為它沒有辦法編譯!編譯情況如下:

為什麼不能通過編譯呢 ?

原因就出在Show(null)這個方法這裡!如果僅僅有static void Show(string s)和 static void Show(Object o)方法構成重載關系,那麼null我們既可以理解為空string引用 也可以理解為空Object引用,因為string類型的限制更精確一些,所以C#會按照最精確地匹 配成string類型,因而會執行static void Show(string s)這個方法。這是在前面的代碼中 已經被證明的。可是現在多了一個static void Show(Program p)方法的重載,null既可以理 解成空string類型引用,也可以理解成空Program類型引用,因為string類和Program類都是 Object類的派生類,所以按照前面的推論自然不會當成空Object類型的引用。因為String類 和Program類之間不存在繼承關系,按照最精確匹配原則,編譯器無法決定匹配成String類還 是Program類最精確,所以編譯無法通過。

附注:最近嘗試將一些比較基礎的理論的 知識用比較淺顯的話語表達出來,主要是為了方便初學者理解和學習,也許某些詞語用得不 夠professional,,但是如果詞語太professional了怕初學者理解起來有困難,敬請各位大 俠諒解,因為本文不是為你們寫的。同時也歡迎各位與我交流經驗和心得。最近垃圾郵件太 多,所以不便在這裡公開我的email,如果各位有興趣與我交流,請加我為csdn好友,這樣就 能看見我的QQ和email了.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved