Изменения документа Dispose
Редактировал(а) Alexandr Fokin 2024/06/02 16:03
От версии 1.10
отредактировано Alexandr Fokin
на 2024/06/02 16:02
на 2024/06/02 16:02
Изменить комментарий:
К данной версии нет комментариев
К версии 1.2
отредактировано Alexandr Fokin
на 2023/02/15 23:07
на 2023/02/15 23:07
Изменить комментарий:
К данной версии нет комментариев
Сводка
-
Свойства страницы (1 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Содержимое
-
... ... @@ -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,21 +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}} 91 -|(% style="width:465px" %)Dispose и упаковка (boxing)|(% style="width:1030px" %)((( 92 -If my struct implements IDisposable will it be boxed when used in a using statement? 93 -[[https:~~/~~/stackoverflow.com/questions/2412981/if-my-struct-implements-idisposable-will-it-be-boxed-when-used-in-a-using-statem/2413844#2413844>>https://stackoverflow.com/questions/2412981/if-my-struct-implements-idisposable-will-it-be-boxed-when-used-in-a-using-statem/2413844#2413844]] 94 - 95 -When does a using-statement box its argument, when it's a struct? 96 -[[https:~~/~~/stackoverflow.com/questions/1330571/when-does-a-using-statement-box-its-argument-when-its-a-struct>>https://stackoverflow.com/questions/1330571/when-does-a-using-statement-box-its-argument-when-its-a-struct]] 97 -))) 79 +