C#.Net 类的同名方法重载调用顺序
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
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)两个方法的参数不明确,产生二义性。
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)两个方法的参数不明确,产生二义性。
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网