Weak links and one-time objects

In C #, you can create weak references to objects, as described here:

Class WeakReference

In .net, some classes also implement the IDisposable interface. The Dispose method of this interface is called manually to manually delete any managed or unmanaged resources that are currently held. An example would be a Bitmap object or class.

If I assign an object that implements IDisposable for a weak reference, is Dispose called if the weak reference collects the object?

+5
source share
4 answers

In general, the answer is really absent.

, IDisposable IDisposable pattern (, .NET ). , , , Dispose. , IDisposable Dispose.

(: Fernando IDisposable )

+5

GC Dispose. Dispose .

+5

. :)

+2

. :

class Program {
        static void Main(string[] args) {
            Test test = new Test();
            Console.WriteLine(test.Disposable == null);
            GC.Collect();
            Console.WriteLine(test.Disposable == null);
            Console.ReadLine();
        }
    }

    public class Test {
        private WeakReference disposable = new WeakReference(new WeakDisposable());
        public WeakDisposable Disposable {
            get { return disposable.Target as WeakDisposable; }
        }
    }

    public class WeakDisposable : IDisposable {
        ~WeakDisposable() {
            Console.WriteLine("Destructor");
        }
        public void Dispose() {
            Console.WriteLine("Dispose");
        }
    }

:

False
True
Destructor

, Dispose.

+1

All Articles