Тип системы; неявное приведение к строке

Глядя на класс System.Type в окне определения кода, я не могу понять, как экземпляр этого класса неявно преобразуется в строку. Например, в следующем коде:

int foo = 0;
Console.WriteLine("Hi! I'm a type of type {0}", foo.GetType());

Как System.Type, полученный в результате GetType(), был неявно приведен к строке?


person Alexandre Bell    schedule 08.11.2009    source источник


Ответы (1)


Это не неявное приведение к строке. Он преобразуется в Object (со стандартным неявным преобразованием ссылок), а String.Format форматирует его соответствующим образом — в данном случае вызывая ToString.

Это не делается во время компиляции. Показанный код вызывает перегрузку Console.WriteLine(string, object).

person Jon Skeet    schedule 08.11.2009
comment
@lagerdalek: Я думаю, что когда-нибудь на этой неделе я уйду на пенсию, Тони, и снова стану собой. - person Jon Skeet; 09.11.2009
comment
Да, да, это вызов одного из перегруженных методов WriteLine(). Спасибо что подметил это. Пропустил это, я прочитал это как Console.WriteLine(blablah+foo.GetType()); Теперь мы, вероятно, получили бы ошибку компиляции... хм. - person Wim Hollebrandse; 09.11.2009
comment
Нет, не будем — из-за того, как работает конкатенация строк. Хотя это уже другой вопрос :) - person Jon Skeet; 09.11.2009