Версия NuGet и количество загрузок Actions Codacy CodeFactor

    Disposables (english version)

    Эта библиотека помогает сделать объекты высвобождаемыми быстрым, коротким, простым и безопасным способом.

    Абстрактный класс Platform.Disposables.DisposableBase пытается удалить объект, даже если метод Dispose нигде не вызывался пользователем, либо при вызове деструктора экземпляра, либо при возникновении события OnProcessExit, в зависимости от того, что произойдет раньше. И позаботится о том, чтобы логика удаления по умолчанию выполнялась только один раз, но, если она вам действительно нужна, вы можете разрешить несколько вызовов и попыток удаления, переопределив соответствующие свойства.

    Интерфейс Platform.Disposables.IDisposable расширяет System.IDisposable добавляя свойство IsDisposed и метод Destruct. Метод Destruct предназначен для того, чтобы не генерировать исключения, что делает его безопасным для использования в деструкторах классов. Все игнорируемые исключения доступны в Platform.Disposables.IgnoredDisposables, если вам нужно их отладить.

    Пространство имён: Platform.Disposables

    Ответвление от: Konard/LinksPlatform/Platform/Platform.Helpers/Disposables

    Пакет в NuGet: Platform.Disposables

    Примеры

    Если вы можете использовать наследование в вашем классе. Например, если у вас нет другого наследуемого базового класса.

    using Platform.Disposables;
    
    namespace Examples
    {
        public class DisposableBaseUsageExample : DisposableBase
        {
            protected override void Dispose(bool manual, bool wasDisposed)
            {
                // Логика высвобождения
            }
        }
    }
    

    Если вы не можете использовать наследование в вашем классе. Например, если у вас есть другой базовый класс от которого унаследован ваш класс.

    using Platform.Disposables;
    
    namespace Examples
    {
        public class DisposableUsageExample : System.IDisposable
        {
            private readonly Disposable _disposable;
    
            public DisposableUsageExample() => _disposable = new Disposable(Disposed);
    
            public void Dispose() => _disposable.Dispose();
    
            ~DisposableUsageExample() => _disposable.Destruct();
    
            private void Disposed(bool manual, bool wasDisposed)
            {
                // Логика высвобождения
            }
        }
    }
    

    Если у вас нет доступа к внутренней структуре класса объекта. Вы можете использовать высвобождаемый контейнер для вашего объекта. Контейнер может быть преобразован обратно в переданный объект в любое время.

    using Platform.Disposables;
    
    namespace Examples
    {
        public class Examples
        {
            public static void UseAndDispose()
            {
                var array = new int[] { 1, 2, 3 };
                Disposable<int[]> disposableArray = (array, () => array = null);
                WorkWithObjectAndDispose(disposableArray);
                // Здесь array == null
            }
    
            private static void WorkWithObjectAndDispose(Disposable<int[]> disposableArray)
            {
                using (disposableArray)
                {
                    int[] array = disposableArray;
    
                    // Используйте ваш объект здесь
    
                } // Здесь вызывается () => array = null
            }
        }
    }
    

    Документация

    • Интерфейс IDisposable.
    • Абстрактный класс DisposableBase.
    • Класс Disposable.
    • Класс Disposable<T>.

    PDF файл с кодом для электронных книг.

    Зависит от

    • Platform.Disposables

    Зависимые библиотеки

    • Platform.Collections
    • Improve this Doc
    Back to top Generated by DocFX