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 测试: 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)两个方法的参数不明确,产生二义性。
参考文档:
Delphi程序调用C#.Net编译的DLL并打开窗体(详解) C# 动态编译及调用WebService的方法 C#.Net窗体多重继承构造器及Load事件执行顺序详解 C#.Net 调用Delphi 编译的ActiveX COM组件(原) C# 子窗体中调用父窗体中的方法(或多窗体之间方法调用) C#.NET 对象(字符串)转换常用扩展方法 C#.NET扩展的动态对象支持动态属性和方法以及Json格式与对象互转 C#.NET 定义动态对象dynamic以及属性和方法 C#.NET WEBAPI 接口设计与调用 C#.NET WEBAPI 接口设计-调用多个参数的接口 C#.NET获取程序工作路径的几种方法 C#.NET短信通用接口设计-调用短信API案例|C/S框架网 通过.NET反射动态调用SetValue方法给属性PropertyInfo赋值 C#方法重载(函数重载) C#方法的参数(实参和形参)
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |