![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| ChiciucMaxim |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 22.6.2008 Репутация: -1 Всего: нет |
У меня такой вопрос.
class First { Second ob = new Second(); ~First() { ob.show(); } } class Second { public void show() { Console.WriteLine("in second show."); } } void Main() { First frstOb = new First(); } Когда по выходу из Main() объект типа First теряет корень (ссылку frstOb), сборщик мусора помечает объект типа First как готовым для вызова Finalize(). Что в это время происходит с объектом типа Second? Результат выполнения таков: in second show. Можно со 100% гарантией сказать что такой результат будет получатся при каждом выполнении программы? |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
Second тоже уничтожится после того, как уничтожится First.
-------------------- СУВ, Partizan. |
|||
|
||||
| ChiciucMaxim |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 22.6.2008 Репутация: -1 Всего: нет |
А к тому моменту как будет вызван ob.show(), Second может уже и не быть?
|
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
ChiciucMaxim, нет, пока объект First не уничтожится, ссылка на Second будет в нём...деструктор вызывается перед уничтожением объекта...
-------------------- СУВ, Partizan. |
|||
|
||||
| ChiciucMaxim |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 22.6.2008 Репутация: -1 Всего: нет |
А как тогда понимать это:
The finalizers of two objects are not guaranteed to run in any specific order, even if one object refers to the other. That is, if Object A has a reference to Object B and both have finalizers, Object B might have already finalized when the finalizer of Object A starts. Добавлено через 40 секунд это из msdn |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
ChiciucMaxim, финалайзер вызывается после/в самом конце деструктора. к тому же по умолчанию object.Finalize ничего не делает.
в вашем примере реализаций финалайзеров нету...
вот очень хорошая презентация на тему управления памятью в .net: http://www.dotsite.spb.ru/lectures/dotnet_5.ppt -------------------- СУВ, Partizan. |
|||
|
||||
| Kosten |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 30.6.2003 Где: Cанкт-Петербург Репутация: нет Всего: нет |
вот еще статья про завершители
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |