Задать вопрос
Amir228
@Amir228

Как работает Object?

Object это ведь родитель всех классов. Как родительский класс может знать кто его наследовал и какое он имеет значение? Тот же самый методы GetType(), этот метод максимум мог что дать так это тип Object, родители ведь не знают о производных классов.

Или вот это:
public static void Main(string[] args)
        {
            object str = "abc";
            str = 1;

            Console.WriteLine(str);
        }

Это как бы строка, но изменив значение уже становиться int-ом. Как object может быть чему то ровна?
  • Вопрос задан
  • 209 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 3
Это особый класс, вот он и знает то, чего простым смертным не положено.

Информация о типе хранится в самом начале экземпляра объекта - по тому даже не обязательно его как-то по особенному переопределять, чтобы что-то работало.

Вот тебе ещё немного для взрыва мозга:
Object - ссылочный тип.
Все структуры - значимые типы.
Но при этом все структуры каким-то образом наследуют от Object, хотя в обычной ситуации структуры вообще ни от чего наследовать не могут.

UPD: а во втором случае всё работает, тк все объектынаследуются от object => происходит вполне легальный апкаст (или боксинг в случае int)
Ответ написан
BloodyAstra
@BloodyAstra
Как уже выше написали. Все структуры наследуются от Value type. а он наследуется от Обьект.
А на твой вопрос, ответ еще проще. переменная str, не стринг, а object, из-за этого она может принять int, подробнее почитай о Боксинге и анбоксинге
Ответ написан
Комментировать
yarosroman
@yarosroman Куратор тега C#
C# the best
По поводу была строка и нет.
str в первую очередь переменная, а с точки зрения языка, это ссылка на место в памяти. Присвоив другое значение, соответственно меняется указателем. Грубо, показал пальцем на диван, а потом на стол.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы