Изменения документа Dispose

Редактировал(а) Alexandr Fokin 2024/06/02 16:03

От версии 1.9
отредактировано Alexandr Fokin
на 2023/02/15 23:43
Изменить комментарий: К данной версии нет комментариев
К версии 1.2
отредактировано Alexandr Fokin
на 2023/02/15 23:07
Изменить комментарий: К данной версии нет комментариев

Сводка

Подробности

Свойства страницы
Содержимое
... ... @@ -33,8 +33,7 @@
33 33   }
34 34   }
35 35  }{{/code}}
36 -|(% style="width:465px" %)Отчистка управляемых ресурсов
37 -(Соответственно не использует финализацию).|(% style="width:1030px" %){{code language="C#"}}public sealed class Foo : IDisposable
36 +|(% style="width:465px" %)Отчистка управляемых ресурсов|(% style="width:1030px" %){{code language="C#"}}public sealed class Foo : IDisposable
38 38  {
39 39   private readonly IDisposable _disposable1;
40 40   private readonly IDisposable _disposable2;
... ... @@ -41,15 +41,14 @@
41 41  
42 42   public Foo()
43 43   {
44 - _disposable1 = new Bar();
45 - _disposable2 = new Bar();
43 + _bar = new Bar();
46 46   }
47 47  
48 48   public void Dispose()
49 - {
50 - _disposable1.Dispose();
51 - _disposable2.Dispose();
52 - }
47 + {
48 + _disposable1.Dispose();
49 + _disposable2.Dispose();
50 + }
53 53  }{{/code}}
54 54  |(% style="width:465px" %)Наследование. Отчистка неуправляемых и управляемых ресурсов.|(% style="width:1030px" %){{code language="C#"}}class DerivedClassWithFinalizer : BaseClassWithFinalizer
55 55  {
... ... @@ -77,14 +77,5 @@
77 77   base.Dispose(disposing);
78 78   }
79 79  }{{/code}}
80 -|(% style="width:465px" %)Пример использование механизма отчистки для воскрешения (resurrection) объекта.
81 -\\Можно доработать для использования Dispose (не подавляется финализация, не выполняется повторная регистрация).
82 -Если объект внутри себя использует другие финализируемые объекты, то внутри блока финализатора их состояние может быть недетерминировано (скорее всего их придется пересоздавать).|(% style="width:1030px" %){{code language="C#"}}class A {
83 - private IObjectPool _pool = ...;
84 84  
85 - ~A() {
86 - //will not die. keep a reference in resurectedA.
87 - _pool.ReturnToPool(this);
88 - GC.ReRegisterForFinalize(this);
89 - }
90 -}{{/code}}
79 +