System.Type; неявно преобразуване към низ

Докато разглеждам класа 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