#c# #generics #overloading
#c# #общие положения #перегрузка
Вопрос:
у меня проблема с C # generics при попытке вызвать перегруженные методы. Я был бы признателен, если бы вы могли мне помочь.
я вызываю Example.test()
public class Example
{
private String printObject(Object o)
{
//this is the one that is called
}
private String printObject(String o)
{
//this is the one I expect to be called
}
private void callPrint<T>(Object o)
{
if (o is T)
{
T tmp;
tmp = (T)o;
data = _printObject(tmp);
}
}
public String foo(Object o)
{
callPrint<String>(o);
}
public static void test()
{
String test="Test";
foo(test);
}
}
Комментарии:
1. Разве
void callPrint<T>(T item)
не было бы больше смысла?
Ответ №1:
Ну, то, что вызывается, должно быть определено один раз для всех типов. Ваш String printObject(String o)
будет действителен, только если T
является строкой — в противном случае нет, поэтому компилятор не может привязать универсальный метод к этому статически типизированному методу.