当两者具有相同的名称但签名不同时,如何调用当前函数中的另一个函数?

时间:2012-03-27 13:32:56

标签: c# overloading

我有这样的情况:

public static SqlDataReader ReadFromDB(string inputSQLStatement)
{
    //Does some actual work here ..
}

public static DataTable ReadFromDB(string inputSQLStatement)
{
    return new DataTable().Load(ReadFromDB(inputSQLStatement));
}

基本上第二个函数试图调用与调用函数同名的另一个函数,但是具有不同的返回类型..

但是使用上面的代码,我在第二个函数的返回行上得到以下错误:

The call is ambiguous between the following methods or properties ...

我想也许编译器可以弄清楚从第二个函数返回到一个带有SqlDataReader对象的函数,所以它知道它必须调用ReadFromDB()的版本,但我想我需要明确指定要显式调用的版本..

那我怎么解决这个问题呢?

编辑:

没关系,我找到了答案。 C#中不支持按返回类型重载函数:http://msdn.microsoft.com/en-us/library/aa691131(v=vs.71).aspx

3 个答案:

答案 0 :(得分:2)

不支持按返回类型重载,因为方法的正式签名不包括返回类型,只包含方法的名称和参数的类型(感谢CAbbot)。有关详细信息,请参阅here 在这种情况下,您需要以不同方式命名方法,例如:

public static SqlDataReader ReadFromDB(string inputSQLStatement)
{
    //Does some actual work here ..
}

public static DataTable ReadDataTableFromDB(string inputSQLStatement)
{
    return new DataTable().Load(ReadFromDB(inputSQLStatement));
}

答案 1 :(得分:0)

方法签名的名称,参数长度是唯一的,如果长度相同,那么它们的类型(当使用params时,还有另一种情况)。这个想法是方法的返回不计入方法签名。

因此,您可以重命名该方法:

ReadFromDBIntoTable

答案 2 :(得分:0)

返回值不属于签名。您可以为方法指定不同的名称,例如ReadDataTableFromDB,或将它们移动到您明确实现的接口。