Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> __gc и __nogc - где и в каких случаях ставится? vs2003 .net 
:(
    Опции темы
Arks
Дата 13.12.2006, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 7.5.2006
Где: Барнаул

Репутация: нет
Всего: нет



Помогите разобраться, где и в каких случаях ставится __gc и __nogc.
Читал мсдн/статьи и понял следующее:
1) в описании классов и структур, когда они должны быть управляемыми. Пример:
Код
public __gc struct My {System::Int32 x;};

2)При создании управляемых указателей на те классы, которые были определены как __gc классы, указывать __gc не трубуется. Например:
Код
__gc struct My {...};
My *my = new My;

3)С массивами при их описании и создании (или не надо - подразумевается, что массив управляемый?):
Код
Int32 my __gc[] = new Int32 __gc [20];

Когда же определяется или создаётся управляемый класс, то __gc не требуется:
Код
__gc struct My {...};
My myar[] = new My[20];

4)При возвращении управляемых массивов из функции:
Код
Int32 myfunc(...) __gc [] {...};

5)Неуправляемые указатели (например, внутри управляемых классов, т.к. управляемые ук-ли в них применять нельзя) и неуправляемые массивы:
Код
__gc class My
{Int32 x;
 Int32 __nogc *pointer;
 Int32 array __nogc[20];
 My() {pointer = __nogc new Int32;}

6) На __value классы можно делать только неуправляемые указатели (я говорю НЕ про массивы):
Код
__value struct My {...};
My *p = __nogc new My;


Вот, если чего упустил или где ошибся поправте.
Ещё остался у меня один вопрос, в рефлекторе я наткнулся на то, что все new пишутся так: ... __gc new ... . Зачем? всё работает и без этого, да и в статьях я не нашёл ответа. Едиснственное, что: знаю, что в vs2005 пишется gcnew, ну так я в 2003 работаю всё-таки. Просто в рефлекторе __gc new пишется даже при создании массивов: Int32 ar[] = __gc new __gc[20];
PM MAIL ICQ Skype MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0414 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.