首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

问个方法重载的有关问题

2011-12-13 
问个方法重载的问题我有3个返回人员信息的方法Employee()//无条件 返回全部人员Employee(int autoID) //返

问个方法重载的问题
我有3个返回人员信息的方法

Employee() //无条件 返回全部人员
Employee(int autoID) //返回某个人员的信息
Employee(int deptID) //返回属于某部门的全部人员信息

第二种和第三种的参数怎么区分呢?
难道只能改方法名称吗?

[解决办法]

[解决办法]
区分不了。

如果lz正在使用C#4.0那么可以尝试下如下代码:

C# code
Employee(int autoID = 0, int deptID = 0){    if (autoID != 0 && deptID == 0)    {        ...查询人员    }    if (autoID == 0 && deptID != 0)    {        ...查询部门    }    if ((autoID != 0 && deptID != 0) || (autoID == 0 && deptID == 0))    {        throw new Exception("invalid call");    }}
[解决办法]
那何苦这样呢,呵呵
Employee(int id,bool isdept) {
 
}
探讨
区分不了。

如果lz正在使用C#4.0那么可以尝试下如下代码:
C# code
Employee(int autoID = 0, int deptID = 0)
{
if (autoID != 0 && deptID == 0)
{
...查询人员
}
if (autoID == 0 && deptID !=……

[解决办法]
探讨
我有3个返回人员信息的方法

Employee() //无条件 返回全部人员
Employee(int autoID) //返回某个人员的信息
Employee(int deptID) //返回属于某部门的全部人员信息

第二种和第三种的参数怎么区分呢?
难道只能改方法名称吗?

[解决办法]
Employee(int autoID) //返回某个人员的信息
Employee(int deptID) //返回属于某部门的全部人员信息

比如:若 deptID 小于100, autoID >= 100,

那么程序中可以根据id的大小判断要执行的操作!

要不 Employee(int id, IdType idType);

public enum IdType
{
deptID,
PersonID
}
[解决办法]
其实对这个问题,简单的方法加个bool型参数区分一下,而规范的做法是定义个枚举,然后加上个枚举参数。
比如ado.net中执行ExecuteNonQuery方法,而一个参数可以是sql语句,也可以是存储过程名,封装时就可以加个参数,用那个枚举。

热点排行