首页/技术分享

二次开发教程:C# 使用弱引用释放静态资源

发布于:2019-07-25 15:13:28
4120人 分享

    class Program

    {

        static void Main(string[] args)

        {

            TestClass.Defalut.i = 5;

            //输出5

            Console.WriteLine(TestClass.Defalut.i);

            GC.Collect();

            //输出0,表示Default已经是重新生成的,之前的对象已经被回收


            Console.WriteLine(TestClass.Defalut.i);


            TestClass1.Defalut.i = 5;

            //输出5

            Console.WriteLine(TestClass1.Defalut.i);

            GC.Collect();

            //输出5

            Console.WriteLine(TestClass1.Defalut.i);


            Console.ReadLine();

        }

    }


    public class TestClass

    {

        private static readonly object locker = new object();


        private static WeakReference _defalut = null;


        public static TestClass Defalut

        {

            get

            {

                if(_defalut==null||!_defalut.IsAlive)

                {

                    lock(locker)

                    {

                        TestClass tc = new TestClass();

                        _defalut = new WeakReference(tc);

                    }

                }

                return _defalut.Target as TestClass;

            }

        }

        private TestClass()

        {


        }


        public int i = 0;

    }

    public class TestClass1

    {

        private static readonly object locker = new object();


        private static TestClass1 _defalut = null;


        public static TestClass1 Defalut

        {

            get

            {

                if (_defalut == null)

                {

                    lock (locker)

                    {

                        _defalut  = new TestClass1();

                    }

                }

                return _defalut;

            }

        }

        private TestClass1()

        {


        }


        public int i = 0;

    }

转载请注明来源本文地址:https://www.tuituisoft/blog/3195.html

上一篇:

二次开发教程:WPF 模板选择器

下一篇:

二次开发教程:WPF使用其他dll里的样式