Страницы

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

воскресенье, 15 марта 2020 г.

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

#c_sharp #net #clr


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

    


Ответы

Ответ 1



Проще всего посмотреть имплементацию через Рефлектор или ILSpy. Или на reference source. class object { // ... public virtual string ToString() { return this.GetType().ToString(); } // ... } Компилятор мог бы применить свою компиляторную магию, но тут она не понадобилась. Метод GetType() возвращает настоящий, runtime-тип объекта, а уж тип знает, как он называется.

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

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