Страницы

Поиск по вопросам

среда, 5 июня 2019 г.

Как SomeInstance.ToString() всегда возвращает правильное название класса?

Собственно вопрос: как и почему автоматически перегружается виртуальный метод базового класса 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-тип объекта, а уж тип знает, как он называется.

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

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