1

如何四处走动?我不想拥有不同名称的函数。

public class DataRowSafe
{

    public String Get(String Column)
    {
        return String.Empty;
    }

    public int Get(String Column)
    {
        return 0;
    }
}


    DataRowSafe r=new DataRowSafe();
    String res=r.Get("Column1");
    int res2=r.Get("Column2");//<--- Ambiguous call
4

5 回答 5

5

方法的重载要求您的类似名称的方法具有不同的签名。返回值是微不足道的!在这里查看教程。

于 2013-04-02T09:25:25.903 回答
2

你不能,没有办法,唯一的办法就是有一个不同的签名。

于 2013-04-02T09:25:57.883 回答
2

您可以像这样引用参数吗

public class DataRowSafe
{

    public void Get(String Column, ref string myParam)
    {
        myParam = String.Empty;
    }

    public void Get(String Column,ref int myParam)
    {
        myParam = 0;
    }
}

int i = 0;
string st = "";
new DataRowSafe().Get("name", ref i);
new DataRowSafe().Get("name", ref st);
于 2013-04-02T09:32:41.923 回答
1

你应该得到一个错误,比如

“DataRowSafe”已经定义了一个名为“Get”的成员,具有相同的参数类型

函数的返回类型并不重要,但在这种情况下,编译器会混淆可用于调用的两种方法,并且不确定要选择哪种方法,也许您可​​以使用泛型来克服这个问题

像这样的样本

public static T GetValue<T>(string column)
{    
    string returnvalue="";
    //process the data ...
    return (T)Convert.ChangeType(returnvalue, typeof(T), CultureInfo.InvariantCulture);  
}
于 2013-04-02T09:33:31.690 回答
0

这是不可能的,因为重载仅适用于不同的签名。如果签名相同,则 c# 编译器将返回错误。

于 2013-04-02T12:53:55.637 回答