大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > C#技巧 > C#核心语法

C#核心语法(6)

关键词:语法核心  阅读(5516) 赞(20)

[摘要]本文讲解了C#的核心语法,下面开讲。

6.析构(Destructor)

(1)      析构函数(Finalize操作)

下面程序运行结果:构造A构造A析构A析构A。

  class Program

    {

        static void Main(string[] args)

        {

   new A();

   new A();

        }

    }

    class A

    {

        public A()

        {

            Console.Write("构造A");

        }

        ~A()//析构

        {

            Console.Write("析构A");

        }

    }

(2)      在一般情况下不要实现析构函数,这会影响垃圾回收的性能。

(3)      显示调用垃圾回收:GC.Collect()会建议程序调用垃圾回收,微软强烈建议不要这样做!

(4)      释放模式,IDisposable接口

    class A:IDisposable

    {

        private bool disposed = false;//标志是否已释放资源


        protected virtual void Dispose(bool disposing)

        {

            if (!this.disposed)

            {

                if (disposing)

                {

                    Console.WriteLine("调用所引用的类的Dispose()方法!");

                }

                Console.WriteLine("调用类本身的非托管资源!");

                disposed = true;

            }

        }

        public void Dispose()

        {

            Dispose(true);//调用手动释放资源

            GC.SuppressFinalize(this);//阻止调用终结器

        }

        ~A()

        {

            Dispose(false);

        }

}

对于下面主方法,执行结果:调用类本身的非托管资源!

    class Program

    {

        static void Main(string[] args)

        {

            A a = new A();

        }

}

对于下面主方法,执行结果:

调用所引用的类的Dispose()方法!

调用类本身的非托管资源!

    class Program

    {

        static void Main(string[] args)

        {

            A a = new A();

            a.Dispose();

            a.Dispose();

        }

}

(5)      对于继承了IDisposable接口的类,使用using简化try{}finally{}

对于下面的两个主方法,执行结果都是:

使用a对象

调用所引用的类的Dispose()方法!

调用类本身的非托管资源!

    class Program

    {

        static void Main(string[] args)

        {

            A a = new A();

            try

            { Console.WriteLine("使用a对象"); }

            finally

            { a.Dispose(); }

        }

}

    class Program

    {

        static void Main(string[] args)

        {

            A a = new A();

            using (a)//使用using

            {

                Console.WriteLine("使用a对象");

            }

        }

}



相关评论