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

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

編輯:關於C語言

從上面的IL代碼我們可以看出對於 string s=null;這句代碼在IL中表示為:ldnull。

再根據上面的結論,我們看下面的 代碼:

using System;
public class Program
{  public static void Main()
  {
  Show(null);
  Show("");
   Show(1);
  }
  static void Show(Object o)
  {
   Console.WriteLine("Object");
  }
  static void Show (String s)
  {
  Console.WriteLine("String");
  }
}
猜猜上面的代碼執行結果會是怎樣的?

以下是程序運行結果:

String
Object
Object

從上面的運行結果我們可以 得出以下結論:

(1)從Show(null)最後調用的是static void Show(String s)方法我 們更進一步可以說在C#中是方法調用盡量精確匹配的。盡管null我們可以理解為一個空 object對象或者一個空字符串,但是在這裡C#還是精確為派生類。這就像我們沒有錢,可以 說沒有一分錢也可以說沒有500英鎊,但是沒有一分錢自然就沒有500億英鎊,所以我們跟別 人說沒有錢的時候沒有必要說沒有500億英鎊一樣。在這裡自然null就表示空字符串。所以 Show(null)這個方法會調用static void Show(String s)這個方法。

這有點像下面的 情況:

一次活動大會上,主持人說:“身高不到1.60m的請坐在1到3排,身高不 到1.75m的請做到4到6排,其他的請隨便坐。”

上面的語句似乎有些邏輯方面的 問題,應該說身高超過1.60m但是不到1.75m的請坐到4到6排。但是如果你面對著一群拿著槍 的強盜,他說上面的話時,恰好你也在場並且你的身高是1.55m,你會坐到哪一排?你總不可 能冒著挨一槍的危險去糾正他的邏輯錯誤吧?最好的辦法是坐到1到3排。因為無論怎麼說你 的身高是絕對滿足不到1.60m這個條件的(盡管你的身高也滿足強盜說的第二個條件,即身高 不到1.75米,但是你肯定不會冒這個危險,從上下句的意思我們也能推斷出人家的意思就是 身高在1.61m到1.74m之間的人坐4到6排)。

在上面的代碼中,你在運行環境的眼中就 是一個持槍的強盜,雖然null可以理解為null類型的string或者null類型的object,但是它 不能向你問清楚這個到底是null類型的string或者null類型的object,因為string是Object 的派生類,所以它按照null類型的string來調用相應的方法了。

(2)從Show ("")最後調用static void Show(String s)這個方法進一步證明了方法調用是盡 量選擇參數最匹配的那個執行。因為Show("")相當於:string s = ""; Show(s);s的引用類型是string,所以會調用static void Show(String s)這 個方法。

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