Luffy1
@Luffy1
Student, Junior .NET programmer, C#, JS, HTML/CSS

Что из себя представляют объекты примитивных значимых, ссылочных типов?

Я щас изучаю рефлексию и то, что творится под капотом. Очередь дошла до полей. Я сначала рассматривал их, как отдельную от обычных объектов(значимого или ссылочного) сущность, но ошибся, так как в книге Джеффри Рихтера говорится, что
Поле (field)— это член данных, который хранит экземпляр значимого типа или ссылку на ссылочный тип.
, то есть это та же самая переменная, только имеет другое месторасположение, поэтому теперь я буду рассматривать поля, как простые объекты ссылочного или значимого типа, а не как что-то иноземное. И тут появляется вопрос, что из себя представляют объекты примитивных значимых, ссылочных типов? Как выглядит объект собственноручно сделанного класса я знаю, про таблицу методов и EEClass знаю, но мне кажется, что объекты примитивных ссылочных типов отличаются от объектов собственноручно сделанных типов, а про внутренности объектов примитивных(да даже не примитивных) значимых типов я вообще ничего не слыхал, пока что. Так вот несколько конкретных вопросов:
1. Какие недоступные для программиста поля, методы, свойства имеют объекты примитивных ссылочных и значимых типов?
2. Имеют ли объекты примитивных ссылочных и значимых типов свои дескрипторы?
3. Если на вопрос №2 ответ - да, то какие недоступные для программиста поля, методы, свойства они имеют?
В книге Рихтера и Голдштейна я об этом ничего не нашёл, нашёл там только о подробном описании собственноручно созданного типа.
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ответы на вопрос 3
yarosroman
@yarosroman Куратор тега C#
C# the best
Модификаторы доступа, позволяют скрывать члены от остального кода, рефлексия позволяет и к ним доступ получить, вот не помню, можно ли приватные методы вызвать. Второе, что есть в объекте, внутренняя структура EEClass. В unsafe режиме, можно и её вытащить, получить таблицу виртуальных методов.
Ответ написан
Комментировать
Разница между
public class A
{
public int _age = 19;
}

и
public static void Main()
   {
    int age = 19;
   }
заключается в том, что 1 переменная находится на уровне класса, а вторая на уровне метода . К примеру вы не можете обращаться к переменной на уровне метода из класса или другого метода, а с переменной на уровне класса вы можете обращаться как на уровне класса, так и на уровне метода.
Ответ написан
@none7
Все свойства ValueType открыты, у базовых типов вроде int, свойств вообще нет, они прибиты к ValueType для красоты. Они хранилище для чисел, просто набор битов, примитивнее просто некуда, с ними работают машинные инструкции, а не методы. В случае локальных переменных они вполне могут существовать лишь в регистрах процессора или вообще стереться за ненадобностью. Это и есть разница между age и _age, другой разницы нет. Что касается методов, то как код фреймворка должен вызывать скрытые методы? Не существует такой вещи.
Какого рода дескрипторы? Гуглёжь находит дескрипторы файлов и окон...
P.S. Сложные книги предполагают, что Вы имеет базовое понимание работы компьютера и понимаете Си.
Ответ написан
Ваш ответ на вопрос

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

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