среда, 16 сентября 2009 г.

Про обобщения и перегрузку функций

Вот вопрос, который мне задают довольно часто:

public class C
{
  public static void DoIt<t>(T t)
  {
    ReallyDoIt(t);
  }

  private static void ReallyDoIt(string s)
  {
    System.Console.WriteLine("строка");
  }

  private static void ReallyDoIt<t>(T t)
  {
    System.Console.WriteLine("всё остальное");
  }
}

Что происходит при вызове C.DoIt<string>? Многие люди ожидают, что выведется «строка» в то время, как на самом деле всегда печатается «всё остальное», независимо от того, какой T использовать.


Почему? Читайте в блоге Эрика Липперта.

Комментариев нет:

Отправить комментарий