|
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 87
|
|
Дискуссия по поводу внутреннего устройства this в c#13.02.2016, 13:00. Показов 1342. Ответов 5
Метки нет (Все метки)
this ссылается именно на экземпляр класса? или еще экземпляр значимого типа?
я знаю что при вызове метода передается неявный параметр this - ссылка на текущий экземпляр (к примеру класса). я имею ввиду вот на этом этапе попрошу объяснить зачем нужен неявный параметр-ссылка this? (1-ый ВОПРОС) просто хочу понять досконально как внутри все устроено и почему именно ТАК. Мое мнение (комментируем так ли это): во внутренней реализации this ссылается на объект-тип (там же таблица методов), но с использованием этим методом полей, текущего экземпляра класса, на который и указывает ссылка this (ссылка на объект). Цитатка из Рихтера (глава про boxing/unboxing). "Хотя неупакованные значимые типы не имеют указателя на типовой объект, вы все равно можете вызывать виртуальные методы (такие, как Equals, GetHashCode или ToString), унаследованные или переопределенные этим типом. Если ваш значимый тип переопределяет один из этих виртуальных методов, CLR может вызвать метод не виртуально, потому что значимые типы неявно запечатываются и поэтому не могут выступать базовыми классами других типов. Кроме того, экземпляр значимого типа, используемый для вызова виртуального метода, не упаковывается.Но если ваше переопределение виртуального метода вызывает реализацию этого метода из базового типа, экземпляр значимого типа упаковывается при вызове реализации базового типа, чтобы в указателе this базового метода передавалась ссылка на объект в куче." Т.е. меня интересует какой именно механизм в данном случае управляет тем, чтобы проверялось, что this указывает на объект в КУЧЕ? (ВТОРОЙ ВОПРОС) так как this можно писать и в struct. Или объяснение в том, что при вызове каждого экземплярного метода неявно передается ссылка this имеющая (или предполагается что имеет) соответствующие тип. К примеру если мы вызываем экземплярные методы на классе object, то предполагается что в this передается ссылка на экземпляр класса object и ПОЭТОМУ требуется упаковка... или как?
0
|
|
| 13.02.2016, 13:00 | |
|
Ответы с готовыми решениями:
5
Дискуссия по поводу современных технологий в области веб-дизайна и верстки Дискуссия Дискуссия по сокетам в Java |
|
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
|
|
| 13.02.2016, 14:34 | |
|
на счет передачи this в методы:
наши ЭВМ не знают никаких объектов/классов, там внизу нет никакого ООП, да и вообще холодно и сыро есть только лента комманд, линейных, последовательных (хотя и есть прыжки вперед/назад по ленте) класс это кучка данных, а не исполняемый код кроме наших полей там всякие внутренние штуки вроде вирутальных таблиц методов, описание типа и т.п а вот методы это уже код, но код этот ничего знать не знает про класс (лента комманд, никаких данных) так вот чтоб рассказать методу что у него есть связанные с ним данные ему и передают ссылку на класс, т.е ссылку на кусок данных где-то в памяти
0
|
|
|
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 87
|
|
| 13.02.2016, 18:01 [ТС] | |
|
Ну это примерно и было ясно. А что по второму вопросу?
0
|
|
|
|
||||
| 13.02.2016, 19:02 | ||||
Сообщение было отмечено kingass как решение
Решение
kingass, Не очень понятны ваш вопросы. Нужно формулировать точнее.
Что касается значимых типов, то там тоже есть this. Только разница в том, что по адресу, куда указывает this лежит не объект, а поля структуры (то есть там есть только данные, служебных данных, типа ссылки на таблицу вирт. методов - нет). Как определяется что this указывает на значимый тип? Ну так компилятор же заранее знает, что тип - значимый.
3
|
||||
|
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 87
|
||
| 13.02.2016, 23:42 [ТС] | ||
А про кучу я сделал акцент так как Рихтер сделал на нее акцент. Что, типа, в некоторых случаях требуется определить что ссылка this указывает в куче... т.е. он (может) думал что this и не на объект в куче может указывать и т.д. ну да ладно... ок Про непонятную цитату из Рихтера: он имеет в виду базовый тип ValueType для структур в котором переопределен метод ToString(). p.s. к слову В Рихтере бывают грубейшие неточности к примеру, еще одна цитата: "В этой главе обсуждаются разновидности методов, которые могут определяться в типе, и разбирается ряд вопросов, касающихся методов. В частности, показано, как определяются методы-конструкторы (создающие экземпляры типов и сами типы), методы перегрузки операторов и методы преобразования (выполняющие явное и не- явное приведение типов)."
0
|
||
|
|
||
| 16.02.2016, 14:27 | ||
|
Лично видел перевод книги (что-то из разряда " C# для начинающих"), там с первой главы описания классов просто какая-то бессвязная ересь была написана. Для интереса взялся сравнивать с оригиналом на английском, и оказалось, что переводчик для слов field и property использовал одинаковый перевод - "свойство". Дальше я ту книгу не читал...
0
|
||
| 16.02.2016, 14:27 | |
|
Помогаю со студенческими работами здесь
6
Дискуссия K/X/ubuntu, Debian Дискуссия про Сетевое Оборудование Небольшая дискуссия. Закрытый код популярных игр Стало появляться окно "Внимание! Запрашиваемая вами дискуссия не найдена" Как разместить драйвер устройства в Диспетчере устройств в разделе Системные устройства? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|