![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
CompWorm |
|
|||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: нет Всего: 31 |
Привет всем!
сразу скажу, я больше знаком с С++, чем с С#, потому такой вопрос задаю, возможно странный ![]() в общем хочу реализовать на шарпе паттерн "адаптер" - это класс с указателями, в конструктор которого передаётся некий объект, далее этот объект потрошится, и его части привязываются к указателям адаптера. Далее к этому объекту я буду обращаться через адаптер. проблема в том, что, как я понял, в Шарпе указатели почти не используются, они находятся в ветке unsafe и вмечто них компилятор как-то сам разруливает что считать указателем, а что объектом... типа все переменные считаются ссылками(?) может кто-нибудь показать на этом примере, как управляться с памятью? |
|||
|
||||
SKrivosein |
|
|||
![]() Идущий в даль ![]() ![]() Профиль Группа: Участник Сообщений: 271 Регистрация: 9.6.2007 Где: Praha - Прага Репутация: 4 Всего: 8 |
CompWorm в .NET работа на прямую с памятью (и указатели) используются редко, только в специальных случаях. И паттерна "адаптер" не касаются.
Этот патерн можно сделать с помощью наследования, интерфейсов или делегатов. В том случае который ты описал (при недостатке инфы ![]() Я попробовал накидать такой псевдокод с делегатами. Мож чего не так, так уточняй задачу...
|
|||
|
||||
CompWorm |
|
||||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: нет Всего: 31 |
короче, я похоже разобрался в общих чертах.
в шарпе классы дают ссылочный тип, а структуры нессылочный. то есть
тут aaa - это то что в с++ зовётся смарт-поинтер. он пока нулевой и к члену ddd обратиться нельзя. его надо будет чем-то проинициализировать. bbb это уже готовый объект, сразу можно позвать bbb.ddd. соответственно при вызове такой функции
в _aaa будет скопирован адрес, на который ссылается aaa, а в _bbb будет скопирована bbb целеком. а чтобы bbb не копировалась, а передалась по ссылке надо использовать ref или out. когда все ссылки на объект ссылочного типа померли, гарбидж-коллектор уничтожит эти объекты (в с++ это я бы назвал утечкой памяти ![]() по моим экспериментам, если вручную не вызвано GC.Clear(); то очистка произойдёт не раньше чем, через минуту. |
||||
|
|||||
SKrivosein |
|
||||
![]() Идущий в даль ![]() ![]() Профиль Группа: Участник Сообщений: 271 Регистрация: 9.6.2007 Где: Praha - Прага Репутация: 4 Всего: 8 |
Это с непривычки ![]()
Но есть там всякие особенности, финализация, освобождение неуправляемых ресурсов, использование инструкции using. Хотя в общем-целом бояться за управляемую память, которая под контролем CLR, не надо. Она за собой заметет. |
||||
|
|||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |