Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Кто объяснит(c#)?!?

9.0K
22 марта 2007 года
Shit_Happenes
58 / / 05.10.2006
Почему после выполнения функции func(Hashtable)
test.ht не приравнивается к null, а сохраняет своё значение.
<CODE>
class test
{
public test()
{
ht = new Hashtable();
ht.Add("1", 1);
ht.Add("2", 2);
}
public void func(Hashtable t)
{
t.Add("3", 3);
t = null;
}
public Hashtable ht;
}
class Program
{
static void Main(string[] args)
{
test m = new test();
Console.WriteLine(m.ht.Count);
m.func(m.ht);
Console.WriteLine(m.ht.Count);
Console.ReadKey();
}
}
</CODE>
9.0K
30 марта 2007 года
ikro
31 / / 12.03.2007
Потому что не так делаешь! Вот так надо:
...
public void func(ref Hashtable t)
{
t.Add("3", 3);
t = null;
}
...
static void Main(string[] args)
{
test m = new test();
Console.WriteLine(m.ht.Count);
m.func(ref m.ht);
Console.WriteLine(m.ht.Count);
Console.ReadKey();
}

Хотя, конечно, странный код! Зачем в хеш-таблицу добавлять элементы, чтоб потом сразу занулить ссылку на него?! Его же сражу Garbage Collector "заметет"...
355
30 марта 2007 года
&lt;SCORP&gt;
786 / / 21.10.2006
ну, сразу же или не сразу же - это как раз ещё вопрос не особо понятный. во всех книгах пишут, что неизветсно заранее, когда будет удалён экземпляр какого-то класса.
ну а программа, по идее просто тестовая, учебная, человек просто балуется )

а фигня такая в программе получается из-за того, что t -- это только копия ссылки на объект. и когда ты пишешь t = null, то ты на самом деле обнуляешься не объект, а только одну из ссылок на него. при этом на сам объект это никак не влияет
9.0K
31 марта 2007 года
ikro
31 / / 12.03.2007
Согласен, в .NET сборщик несколько странный :) . А в .NET Compact Framework еще хуже - похоже он реально удаляет все объекты только после завершения приложения...
273
06 апреля 2007 года
3A3-968M
1.2K / / 22.12.2005
Цитата: ikro
Согласен, в .NET сборщик несколько странный :) . А в .NET Compact Framework еще хуже - похоже он реально удаляет все объекты только после завершения приложения...


В .NET сборщик нормальный, просто ссылок на объекты значит много либо по каким-либо причинам попали в 3 поколение объектов (обычно это статические поля). Не забываем пользоваться финализаторами, IDisposable и профайлером для выявления кода, который держит активные ссылки. Сборщик мусора ВСЕГДА удаляет объекты со слабыми ссылками!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог