Общий вызов перегруженных методов

#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 является строкой — в противном случае нет, поэтому компилятор не может привязать универсальный метод к этому статически типизированному методу.