C#.Net 类的同名方法重载调用顺序
作者:C/S框架网  发布日期:2011/07/25 12:41:19
C#.Net 类的同名方法重载调用顺序

在OOP领域即万物皆对象,是的,int, datetime,null,DBNull,Object等皆可视为对象,有网友问我假设一个类定义一组同名方法(重载Overload),且只有一个不同类型的参数,那么调用顺序是怎样的呢?如何选择执行那个方法呢?

请参考以下示例:


类定义

C# Code:


public class MultiMethods
{
   /// <summary>
   /// 由可空值类型转换为日期
   /// </summary>
   /// <param name="p">可空值类型</param>
   /// <returns></returns>
   public static DateTime Convert(DateTime? p)
   {
      if (p == null) return DateTime.MinValue;
      return MultiMethods.Convert(p.ToString());
   }
   
   /// <summary>
   /// 由对象转换为日期
   /// </summary>
   /// <param name="p">对象</param>
   /// <returns></returns>
   public static DateTime Convert(Object p)
   {
      if (p == null) return DateTime.MinValue;
      return MultiMethods.Convert(p.ToString());
   }
   
   /// <summary>
   /// 由字符串转换为日期
   /// </summary>
   /// <param name="p">字符串</param>
   /// <returns></returns>
   public static DateTime Convert(string p)
   {
      if (p == null) return DateTime.MinValue;
      DateTime result;
      if (DateTime.TryParse(p.ToString(), out result))
      return result;
      else
      return DateTime.MinValue;
   }
   
}

//来源:C/S框架网(www.csframework.com) QQ:1980854898



测试:


C# Code:

DateTime D;

D = MultiMethods.Convert("2011-01-01");//结果:调用字符串string参数的方法
D = MultiMethods.Convert((Object)"2011-01-01");//结果:调用对象Object参数的方法
D = MultiMethods.Convert(DBNull.Value);//结果:调用对象Object参数的方法

DateTime? date = DateTime.Parse("2011-01-01");//可空值类型
date = null;//可空值类型
D = MultiMethods.Convert(date);//结果:调用可空值DateTime?类型参数的方法
 

//Error 1:The call is ambiguous between the following methods or properties:
//'CSFramework.MultiMethods.Convert(System.DateTime?)' and 'CSFramework.MultiMethods.Convert(string)'
//D:\My SourceCode\CSharp\Tech2010 Full Code\CSFramework\CSFramework\Program.cs 23 17 CSFramework

//D = MultiMethods.Convert(null); //编译不通过

null为空类型,提示Convert(System.DateTime?)Convert(string)两个方法的参数不明确,产生二义性。


 

 

 

上一篇 下一篇