析构函数在对象撤消的时候自动调用
写好的类要编译 生成.dll文件
然后在.net 中填加引用 将.dll填加上去
就可以用using 类
写好的类要编译 生成.dll文件
然后在.net 中填加引用 将.dll填加上去
就可以用using 类
解决方案 »
- iframe IE FireFox onload[经验共享]
- Expression Web的相关问题
- 请教RadioButtonList选择的问题
- 我的程序怎么出现InvalidOperationException
- asp.net 实现发邮件出现如下异常
- Request.UrlReferrer为何老是报错“未将对象引用设置到对象的实例”
- mail 类 默认的是用什么组件来发信的??
- 怎样让Outlook样式菜单的高度设为整个页面高度(100%)附完整源码?
- 警惕非典疫情卷土重来!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 用javascript如何判断textbox中的串是否是汉字及其个数?
- 300分求助~~在选定的DataGrid1的行中加入2个DropDownList,要求其中一个DropDownList的内容随另一个内容改变而改变,但是SelectedIndexCha
- 多媒体文件存放在数据库的字段dmt image null中,如何播放?
CLASS会在结速时调用.
REFER TO MSDN
其中: expression
希望在退出 using 语句时调用 Dispose 的表达式。
type
identifier 的类型。
identifier
type 类型的名称或标识符。定义一个以上 type 类型的 identifier 是可以的。在每一个 identifier = initializer 的前边都有一个逗号。
initializer
创建对象的表达式。
statement
嵌入的语句或要执行的语句。
备注
在 using 语句中创建一个实例,确保退出 using 语句时在对象上调用 Dispose。当到达 using 语句的末尾,或者如果在语句结束之前引发异常并且控制离开语句块,都可以退出 using 语句。实例化的对象必须实现 System.IDisposable 接口。
{
class eg
{
public eg(){//构造函数,在对象实例化时调用};
//public eg(参数列表){//有参构造函数,在对象实例化时调用}; public ~eg(){//析构函数,在对象消失时调用};
}
}using Mynamespace
static mail()
{
eg eg1;//自动构造函数
}
之后自动调用析构函数
析构函数用于销毁类的实例。析构函数是通过下面的形式声明的:[attributes] ~ identifier( ) { destructor-body }
此处: attributes(可选)
附加的声明性信息。有关属性和属性类的更多信息,请参阅 C# 属性。
identifier
identifier 与类名相同。
destructor-body
包含销毁类实例的语句的块。
备注
注意 不能对结构使用析构函数。只能对类使用析构函数。
一个类只能有一个析构函数。无法继承或重载析构函数。无法调用析构函数。它们是被自动调用的。 析构函数既没有修饰符,也没有参数。例如,下面是类 MyClass 的析构函数的声明:~ MyClass()
{
// Cleanup statements.
}
该析构函数隐式地对对象的基类调用 Object.Finalize 方法。这样,前面的析构函数代码被隐式地转换为:protected override void Finalize()
{
try
{
// Cleanup statements.
}
finally
{
base.Finalize();
}
}
这意味着对继承链中的所有实例递归地(从派生相近程度最大的到派生相近程度最小的)调用 Finalize 方法。程序员无法控制何时调用析构函数,因为这由垃圾回收器决定的。垃圾回收器检查是否存在应用程序不再使用的对象。它认为这些对象符合销毁条件并回收这些对象占用的内存。程序退出时也会调用析构函数。注意 可以通过调用 GC.Collect 方法强制进行垃圾回收,但大多数情况下应避免这样做,因为这样会导致出现性能问题。有关更多信息,请参阅强制垃圾回收。
示例
下面的示例创建三个类,这三个类构成了一个继承链。类 First 是基类,Second 是从 First 派生的,而 Third 是从 Second 派生的。这三个类都有析构函数。在 Main() 中,创建了派生相近程度最大的类的实例。程序运行时,注意这三个类的析构函数会自动被调用,并且是按照从派生相近程度最大的到派生相近程度最小的次序调用。// Destructors1.cs
using System;class First
{
~First()
{
Console.WriteLine("First's destructor is called");
}
}class Second: First
{
~Second()
{
Console.WriteLine("Second's destructor is called");
}
}class Third: Second
{
~Third()
{
Console.WriteLine("Third's destructor is called");
}
}public class MainClass
{
public static void Main()
{
Third myObject = new Third();
}
}
输出
Third's destructor is called
Second's destructor is called
First's destructor is called
使用析构函数释放资源
一般来说,您不必像使用 C++ 时那样关注内存管理。这是因为 .NET 框架垃圾回收器会隐式地管理对象的内存分配和释放。但是,当应用程序封装窗口、文件和网络连接这类非托管资源时,应当使用析构函数释放这些资源。当对象符合销毁条件时,垃圾回收器会运行对象的 Finalize 方法。资源的显式释放
如果您的应用程序在使用昂贵的外部资源,则还建议您提供一种在垃圾回收器释放对象前显式地释放资源的方式。可通过实现 Dispose 方法(来自 IDisposable 接口)来完成这一点,该方法为对象执行必要的清理。这样可大大提高应用程序的性能。即使有这种对资源的显式控制,析构函数也是一种保护措施,可用来在对 Dispose 方法的调用失败时清理资源。有关清理资源的更多详细信息,请参阅下列主题: 清理非托管资源
实现 Dispose 方法
using 语句