C#析构函数的一些问题

sdlkackajasd 2017-06-26 12:05:08
析构函数里面的语句不会显示吗,比如说这个例子我运行后没输出语句啊
class A
{
public int m = 1;
~A()
{
Console.WriteLine(++m);
}
}
class Program
{
static void Main(string[] args)
{
A a = new A();
A b = new A();
Console.ReadKey();
}
}
还有析构函数是对象被创建后立即执行吗,比如说上面的例子是a创建后就执行++m,b创建后再执行一次++m吗
...全文
177 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qbilbo 2017-06-26
  • 打赏
  • 举报
回复
1,注意变量的作用域。 2,因为不知道GC什么时候才回收,所以要加上:GC.Collect()。
qbilbo 2017-06-26
  • 打赏
  • 举报
回复
class A
    {
        public int m = 1;
        ~A()
        {
            Console.WriteLine(++m);
        }
    }
 
class Program
    {
        static void Main(string[] args)
        {
            Test();
            GC.Collect();
            Console.ReadKey();
        }

        static void Test()
        {
            A a = new A();
            A b = new A();
        }
    }
xuzuning 2017-06-26
  • 打赏
  • 举报
回复
析构函数是在对象销毁以后被执行的
  • 打赏
  • 举报
回复
网上一些“控制台”代码例子,你会看到它们可能在 Dispose 方法中调用了 GC.Collect 方法。要注意这是不是要刻意去测试。如果不是可以测试,那么写 GC.Collect 很可能就是错的;反之在可以测试时这样写就正好是对的。
  • 打赏
  • 举报
回复
.net 可以说是禁止随便去频繁调用 Collect 的,GC 会在合适的时候采取回收存储。但是无论如何都会在内存不足之前去调用它。如果自己只是测试,那么就可以强行调用 Collect。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧