Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/41: Рейтинг темы: голосов - 41, средняя оценка - 4.73
 Аватар для hepr
63 / 35 / 13
Регистрация: 21.10.2010
Сообщений: 538

Указатель на объект-тип

08.01.2013, 11:40. Показов 9006. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, у меня не то чтобы вопрос, скорее прощу уточнить прав ли я.
У любого ссылочного объекта есть к тому же 2 дополнительных поля: указатель на объект-тип и индекс блока синхронизации. Но про значимые типа я ничего не нашел, хотя ведь по логике значимые типы, определенные программистом должны иметь указатель на объект-тип.
Заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.01.2013, 11:40
Ответы с готовыми решениями:

Указатель на ссылочный тип
Доброго времени суток, не могу разобраться с маленькой проблемой: Имеется класс "Car" (его внутреннее содержимое не важно),...

Ссылка на объект в памяти и указатель это одно и тоже?
Разобрался со смыслом различий значимых типов и ссылочных типов, а так же с особенностями их передачи через ref и out. Но не понятно...

Объект-тип?
Прочитал у Рихтера про организацию кучи.Объект-тип это описание методов+всякие данные(индекс синх. блока, стат поля и т.д.).Тоесть мы...

34
 Аватар для n1l
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
09.01.2013, 12:51
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от hepr Посмотреть сообщение
Ну по моим рассуждениям, у статического класса даже нет объекта-типа за ненадобностью, а обращение происходит напрямую к функциям.

У структуры обязан быть объект-тип, другое дело, что структура не имеет указателя на него, если она не запакована.
По моим рассуждениям у статического класса как раз таки есть объект тип и именно он и есть статический класс, так как у Рихтера сказано, что все статические поля и методы содержатся в объекте типа, а экземпляры принадлежащие к этому типу имеют ссылку на этот объект тип, что бы использовать методы и поля общие для всего типа.

Если у структуры нет ссылки на объект тип, значит объект тип ее вообще не используется иначе мы могли бы создать статическую структуру.

Добавлено через 4 минуты
Цитата Сообщение от Psilon Посмотреть сообщение
n1l, ну например, если у структуры есть статические свойства или методы (например метод char.GetNumericValue() или int.Parse()). Как к ним обращаться в таком случае?
Тем более, что никто бы не стал заморачиваться и делать каких-то особых предков для структур, а ведь все структуры наследуются от ValueType, который в свою очередь тоже имеет в предках Object!

Добавлено через 1 минуту
http://msdn.microsoft.com/ru-r... 00%29.aspx
Ну выше было сказано, что это всего-то может быть методы которые просто находятся в таблице методов и все. И мы всего лишь обращаемся по прямой ссылке на эти методы.
А если бы существовал объект тип, то мы бы обращались к нему, что бы задействовать общие методы.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
09.01.2013, 12:52
n1l, есть структура char. У этой структуры есть метод GetNumericValue. Это не метод экземпляра структуры, это метод самой структуры. Вопрос: как это возможно, если, как вы говорите, у структуры нет объекта-типа? Второй вопрос: допустим, вы переопределили операции присваивания, приведения и пр, вопрос: как компилятор выполнит приведение (CustomStruct) new int[10] , если оператор приведения описан в структуре, к которй нет доступа?

Вы никогда не вызывали int.Parse()? Или по-вашему это метод объекта? Тогда бы он вызывался через точку "12".Parse();
Еще раз
структура == класс с некоторыми ограничениями, но он по сути ничем не отличается, Кроме того, что располагает объекты в стеке! У неё есть статические поля, статические методы, конструкторы, нету только возможности создать статическую структуру, потому что уже есть конструкция, выполняющая эту задачу - статический класс? Может ввести еще construct, record, еще что-нибудь, делающее то же самое, что и класс, но зато приятней для глаз?
0
 Аватар для n1l
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
09.01.2013, 12:57
Так вот я об этом и говорил в начале. Как возможно создать статический метод в структуре если она не имеет указателя на объект тип?
Для всех структур говорите? А как же таблица методов? Просто ссылка для метода которая подается для всех структур.
Вы понимаете, что я сейчас бравирую вашими словами а вы моими?

Добавлено через 1 минуту
Цитата Сообщение от Psilon Посмотреть сообщение
(CustomStruct) new int[10]
Интересно, а чего это вы ссылочный тип собрались в структуру засунуть? Я даже не уверен, что это скомпилируется.
Если хотя бы поле у структуру хранило ссылку на массив, а то вы ссылку на массив приводите к типу структуры.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
09.01.2013, 13:01
n1l, да легко, достаточно описать необходимое приведение.
например у структуры 10 полей и она делает
C#
1
2
3
4
5
            public static explicit operator CustomStruct(int[] a)
            {
                if (a.Length != 3) throw new ArgumentException("a");
                return new CustomStruct(a[0],a[1],a[2]);    
            }
Методы и поля структуры описать возможно - значит есть и ссылка на объект-тип, и сам объект тип. А как это реализовано вопрос 10. Никто бы не стал придумывать для структур такой геморрой просто потому, что не нужно. Это называется стандартизацией. Интел вот сейчас выпускает процы, где 60% площади занимает граф. ядро, которое много у кого не используется, потому что дискретная видюха есть. Но кого это волнует? Существует стандартизация, и хотя много кому это ядро не нужно, лучше бы процессорную часть нарастили, все делают с интеграшкой.
0
 Аватар для n1l
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
09.01.2013, 13:04
"12".Parse(); - это объект типа string.
И что по вашему? Если есть у метода ключевое слово static то значит у структуры есть объект-тип?
Я же опять говорю, что вашими словами бравирую.
Зачем структуре объект-тип если она может получить ссылку на общий метод в таблице методов без него?

Добавлено через 1 минуту
Цитата Сообщение от Psilon Посмотреть сообщение
n1l, да легко, достаточно описать необходимое приведение.
например у структуры 10 полей и она делает
C#
1
2
3
4
5
            public static explicit operator CustomStruct(int[] a)
            {
                if (a.Length != 3) throw new ArgumentException("a");
                return new CustomStruct(a[0],a[1],a[2]);    
            }
Вы передаете в структуру не ссылку на массив а копии ссылок на элементы массив, а если массив типов значений то копии самих значений.

Добавлено через 46 секунд
Цитата Сообщение от Psilon Посмотреть сообщение
Методы и поля структуры описать возможно - значит есть и ссылка на объект-тип,
Нету у структуры ссылки на объект тип, вам же сказали выше.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
09.01.2013, 13:05
n1l,
Зачем структуре объект-тип если она может получить ссылку на общий метод в таблице методов без него?
Вы понимаете, что такое таблица методов?
0
 Аватар для n1l
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
09.01.2013, 13:21
Цитата Сообщение от Psilon Посмотреть сообщение
n1l,
Вы понимаете, что такое таблица методов?
Поправьте меня если я ошибаюсь.
vmt

А еще вы понимаете, что такое упаковка и распаковка?
Я понимаю так, что при упаковке мы будем иметь дело уже с классом, а не структурой, а у класса уже будет объект-тип. Тогда как структура всего лишь облегченная реализация для часто используемых типов.
Нельзя рассматривать статические методы структуры после упаковки в контексте этого спора. Нужно рассматривать как раз таки до.
Т.е. когда она находится в стеке и время жизни ее ограничено временем выполнения метода.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
09.01.2013, 13:31
n1l, я попросил своими словами, ну да ладно.
VMT есть таблица методов класса, а не просто висящие в воздухе функции а-ля С++
Упаковка и распаковка - это просто трюк, позволяющий работать со структурами по ссылке.
Структура есть Класс. По всем параметрам. Кроме одного: элементы структуры находятся в стеке. Во всем остальном они идентичны. У них все абсолютно одинаково. Конечно не все так радикально, но отличия к предмету спора отношения не имеют: структуры, это класс, для которого прописано хранение в стеке и хитрое слово.
0
 Аватар для n1l
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
09.01.2013, 13:53
Цитата Сообщение от Psilon Посмотреть сообщение
n1l, я попросил своими словами, ну да ладно.
VMT есть таблица методов класса, а не просто висящие в воздухе функции а-ля С++
Упаковка и распаковка - это просто трюк, позволяющий работать со структурами по ссылке.
Структура есть Класс. По всем параметрам. Кроме одного: элементы структуры находятся в стеке. Во всем остальном они идентичны. У них все абсолютно одинаково. Конечно не все так радикально, но отличия к предмету спора отношения не имеют: структуры, это класс, для которого прописано хранение в стеке и хитрое слово.
Таблица методов - это таблица ссылок на методы объекта. При обращении к ссылке, вызывается нужный метод.
Я вот сейчас обратился опять к Джефри Рихтеру и все таки я был не прав.
Да у структур есть объект-тип и при упаковке к упакованной структуре добавляется ссылка на объект-тип и SyncBlockIndex.
В принципе логично, у структур есть ссылки на общие методы для всего типа минуя объект-тип.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
09.01.2013, 13:56
n1l,
Цитата Сообщение от n1l Посмотреть сообщение
аблица методов - это таблица ссылок на методы объекта. При обращении к ссылке, вызывается нужный метод.
см.
Координирующая таблица объекта содержит адреса динамически связанных методов объекта. Метод вызывается при выборке адреса метода из таблицы. Координирующая таблица будет той же самой для всех объектов, принадлежащих тому же классу, поэтому допускается ее совместное использование.

...
Обычно компилятор создает отдельную vtable для каждого класса. После создания объекта указатель на эту vtable, называемый виртуальный табличный указатель или vpointer, добавляется как скрытый член данного объекта (а зачастую как первый член). Компилятор также генерирует «скрытый» код в конструкторе каждого класса для инициализации vpointer'ов его объектов адресами соответствующей vtable.
Таблица есть у класса, а не у объектов, потому что иначе каждый объект типа char должен был бы жрать 2 байта + 4 для каждого метода, строка из 200 таких символов повесила бы систему.
Цитата Сообщение от n1l Посмотреть сообщение
вот сейчас обратился опять к Джефри Рихтеру и все таки я был не прав.
Да у структур есть объект-тип и при упаковке к упакованной структуре добавляется ссылка на объект-тип и SyncBlockIndex.
рад
0
 Аватар для n1l
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
09.01.2013, 13:59
Цитата Сообщение от Psilon Посмотреть сообщение
n1l,
Таблица есть у класса, а не у объектов, потому что иначе каждый объект типа char должен был бы жрать 2 байта + 4
Я описался.
Я это и имел ввиду.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
09.01.2013, 14:01
n1l, ну и отлично, разобрались
0
 Аватар для n1l
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
09.01.2013, 14:04
Цитата Сообщение от Psilon Посмотреть сообщение
n1l, ну и отлично, разобрались
Сам рад, если честно.
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
09.01.2013, 14:13
Цитата Сообщение от hepr Посмотреть сообщение
указатель на объект-тип
на любом языке тип - это категория, а объект - отдельный экземпляр.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
09.01.2013, 14:19
taras atavin, в любом языке класс это такой же объект, как экзепляр этого класса. В Ruby можно даже искусственно уничтожить объект-класс какого-нибудь экземпляра и "наследовать" этот экземпляр в рантайме от какого-нибудь иного класса.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.01.2013, 14:19

Как получить указатель на управляемый объект?
Как сделать такое на С#? А именно запретить управляемому объекту перемещаться по куче и получить на него указатель. array<int>^...

Недопустимый неполный тип , или как передать в функцию указатель на объект класса , или просто объект
Други мои , кодеры. Не могу я ни как передать в функцию объект класса , или что еще лучше(для меня , так как учусь работать с указателями)...

Что значит константный указатель на объект, указатель на константный объект, и как это можно использовать?
Подскажите, что значит константный указатель на объект, указатель на константный объект, и как это можно использовать??

Указатель на объект или указатель на метод объекта
Здравствуйте! У меня много где случается, что надо классу заводить в заголовке указатель на объект другого класса лишь для того, чтобы...

Как преобразовать ссылку на объект в указатель на этот объект?
Как преобразовать ссылку на объект в указатель на этот объект? Буду благодарен за помощь.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru