永发信息网

在C#中什么叫析构函数,怎么用啊?举个列啊,谢谢!!!

答案:4  悬赏:10  手机版
解决时间 2021-03-23 16:11
  • 提问者网友:溺爱和你
  • 2021-03-22 20:01
在C#中什么叫析构函数,怎么用啊?举个列啊,谢谢!!!
最佳答案
  • 五星知识达人网友:痴妹与他
  • 2021-03-22 20:21
多数情况下c#中用不到析构函数,但如果在class中启用了非托管性资源,那么建议在其析构函数中进行适当资源清理工作(此时结合Dispose模式会更好),这会使.Net的自动垃圾回收和手动处理协调配合起来。
凡具有析构函数的class,其被识别为垃圾后,垃圾回收机制不会简单的进行回收处理,而是会将其加入到终结队列,再由第三方线程(因与主线程不存在数据冲突,故彼此可异步执行,不至应垃圾回收线程误了主程序的事)执行。编写析构函数要注意重点在清理非托管性资源,且不可将垃圾复活。
全部回答
  • 1楼网友:上分大魔王
  • 2021-03-22 22:25
程序员无法控制何时调用析构函数,因为这是由垃圾回收器决定的。 垃圾回收器检查是否存在应用程序不再使用的对象。 如果垃圾回收器认为某个对象符合析构,则调用析构函数(如果有)并回收用来存储此对象的内存。 程序退出时也会调用析构函数。 可以通过调用 collect 强制进行垃圾回收,但大多数情况下应避免这样做,因为这样会导致性能问题。 static void main(string[] args) { program myclass = new program(); myclass.display(); console.readline(); gc.collect();//强制回收 }
  • 2楼网友:洒脱疯子
  • 2021-03-22 22:13
C#中用不到析构函数吧,他自己会回收用完的对象的, C++中一定要用到,形式为 ~function()
  • 3楼网友:枭雄戏美人
  • 2021-03-22 21:35
析构函数用于析构类的实例。 1、不能在结构中定义析构函数。 只能对类使用析构函数。 2、一个类只能有一个析构函数。 3、无法继承或重载析构函数。 4、无法调用析构函数。 它们是被自动调用的。 5、析构函数既没有修饰符,也没有参数。 例如:下面是类Car的析构函数的声明: class Car { ~Car() // destructor { // cleanup statements... } } 该析构函数隐式地对对象的基类调用 Finalize。 这样,前面的析构函数代码被隐式地转换为以下代码: protected override void Finalize() { try { // Cleanup statements... } finally { base.Finalize(); } } 这意味着对继承链中的所有实例递归地调用 Finalize 方法(从派生程度最大的到派生程度最小的)。 再举个例子: 下面的示例创建三个类,这三个类构成了一个继承链。 类 First 是基类,Second 是从 First 派生的,而 Third 是从 Second 派生的。 这三个类都有析构函数。 在 Main() 中,创建了派生程度最大的类的实例。 注意:程序运行时,这三个类的析构函数将自动被调用,并且是按照从派生程度最大的到派生程度最小的次序调用。 class First { ~First() { System.Diagnostics.Trace.WriteLine("First's destructor is called."); } } class Second : First { ~Second() { System.Diagnostics.Trace.WriteLine("Second's destructor is called."); } } class Third : Second { ~Third() { System.Diagnostics.Trace.WriteLine("Third's destructor is called."); } } class TestDestructors { static void Main() { Third t = new Third(); } } 希望可以帮到你~~
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯