Рихтер, обобщенный метод, требуется разжевать - C#

Узнай цену своей работы

Формулировка задачи:

Отрывок из книги:
private static void Display(String s) {
  Console.WriteLine(s);
}
private static void Display<T>(T o) {
**Display(o.ToString());*//*Вызывает*Display(String)
}
Метод Display можно вызвать несколькими способами: Display("Jeff");**********//*Вызывает*Display(String) Display(123);*************//*Вызывает*Display<T>(T) - 2 cлучай Display<String>("Aidan");*//*Вызывает*Display<T>(T) В первом случае компилятор может вызвать либо метод Display, принимающий String, либо обобщенный метод Display заменяя T типом String). Но компилятор C# всегда выбирает явное, а не обобщенное соответствие, поэтому генерирует вызов необобщенного метода Display, получающего String. Во втором случае компилятор не может вызвать необобщенный метод Display, получающий String, поэтому он вызывает обобщенный метод Display. Кстати, очень удачно, что компилятор всегда выбирает более явное соответствие. Ведь если бы компилятор выбрал обобщенный метод Display, тот вызвал бы метод ToString, возвращающий String, что привело бы к бесконечной рекурсии. Здесь или недопечатка "НЕ", или я никак не могу разобраться как получится бесконечная рекурсия: ...не может вызвать необобщенный метод Display, поэтому вызывает обобщенный..... если бы компилятор выбрал обобщенный метод Display- тот вызвал бы метод ToString, возвращающий String, что привело бы к бесконечной рекурсии.

Решение задачи: «Рихтер, обобщенный метод, требуется разжевать»

textual
Листинг программы
Display("Jeff"); // компиллятор может вызвать и обобщенный и явный метод
// всегда предпочитает явный
Display(123); // может вызвать только обобщенный ибо явный не доступен
Display<String>("Aidan"); // может вызвать только обобщенный, так как строка и список строк - это не одно и тоже
// допустим вызвал обобщенный, тогда есть строка
Display(o.ToString()); // вызывает себя же, но преобразует параметр строку, следовательно, вызывает явную версию (предпочтение компилятора), и не получается рекурсии.

Оцени полезность:

14   голосов , оценка 3.786 из 5
Похожие ответы