在C#中什么叫析构函数,怎么用啊?举个列啊,谢谢!!!
展开全部
C#中用不到析构函数吧,他自己会回收用完的对象的,
C++中一定要用到,形式为 ~function()
C++中一定要用到,形式为 ~function()
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
多数情况下c#中用不到析构函数,但如果在class中启用了非托管性资源,那么建议在其析构函数中进行适当资源清理工作(此时结合Dispose模式会更好),这会使.Net的自动垃圾回收和手动处理协调配合起来。
凡具有析构函数的class,其被识别为垃圾后,垃圾回收机制不会简单的进行回收处理,而是会将其加入到终结队列,再由第三方线程(因与主线程不存在数据冲突,故彼此可异步执行,不至应垃圾回收线程误了主程序的事)执行。编写析构函数要注意重点在清理非托管性资源,且不可将垃圾复活。
凡具有析构函数的class,其被识别为垃圾后,垃圾回收机制不会简单的进行回收处理,而是会将其加入到终结队列,再由第三方线程(因与主线程不存在数据冲突,故彼此可异步执行,不至应垃圾回收线程误了主程序的事)执行。编写析构函数要注意重点在清理非托管性资源,且不可将垃圾复活。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
System.Web.UI.Page
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
析构函数用于析构类的实例。
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();
}
}
/* Output (to VS Output Window):
Third's destructor is called.
Second's destructor is called.
First's destructor is called.
*/
希望可以帮到你~~
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();
}
}
/* Output (to VS Output Window):
Third's destructor is called.
Second's destructor is called.
First's destructor is called.
*/
希望可以帮到你~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询