日期:2014-05-20  浏览次数:20829 次

问个方法重载的问题
我有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语句,也可以是存储过程名,封装时就可以加个参数,用那个枚举。