Собственно вопрос: как и почему автоматически перегружается виртуальный метод базового класса System.Object ToString(), если мы его явно ни как не трогаем?
В данной технике используется АОП?
Пример кода:
using System;
class A
{
class B
{
public void D()
{
Console.WriteLine(base.ToString());
}
}
static void Main()
{
B b = new B();
Console.WriteLine(b.ToString());
}
}
Ответ
Проще всего посмотреть имплементацию через Рефлектор или ILSpy. Или на reference source
class object
{
// ...
public virtual string ToString()
{
return this.GetType().ToString();
}
// ...
}
Компилятор мог бы применить свою компиляторную магию, но тут она не понадобилась. Метод GetType() возвращает настоящий, runtime-тип объекта, а уж тип знает, как он называется.
Комментариев нет:
Отправить комментарий