2013-04-02 6 views
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 
+0

Невозможно обойти эту проблему, кроме переименования метода. – Patrik

ответ

5

Перегрузка методов требует, чтобы методы схожими именами имели разные подписи. Возвратная стоимость невелика! Посмотрите на this учебник здесь.

+0

Почему downvote? –

2

Вы не можете, нет способа, единственный способ - иметь другую подпись.

2

Вы можете ссылаться parameners как это вместо

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); 
1

вы должны получить сообщение об ошибке, как

«DataRowSafe» уже определяет элемент под названием «Get» с теми же типами параметров

Тип возврата функции не имеет значения, но в этом случае компилятор путается с t он два метода для вызова и не уверен, что будет получить, может быть, вы могли бы использовать дженерики, чтобы преодолеть эту

образец как

public static T GetValue<T>(string column) 
{  
    string returnvalue=""; 
    //process the data ... 
    return (T)Convert.ChangeType(returnvalue, typeof(T), CultureInfo.InvariantCulture); 
} 
0

Это не представляется возможным, потому что перегрузка работает только для различных подписей. Если подписи совпадают, то компилятор C# вернет ошибку.

Смежные вопросы