构造函数和析构函数是C#类中的一块,具体的作用和定义,百度,这里只用代码说一下一些具体的区别。
public class ABC //一个随意的自定义类
{
private double a;
public double A
{
get { return a; }
set
{
a = value;
Console.WriteLine("A={0}", a);
}
}
public ABC()
{
Console.WriteLine("构造函数ABC被触发");
}
~ABC()
{
Console.WriteLine("构析函数ABC~被触发");
}
}
class Program
{
static void Main(string[] args)
{
ABC _abc;
Console.WriteLine("A有了,按任意键初始化A");
Console.ReadLine();
_abc = new ABC() { A = 12 };//初始化对象并赋一个值
Console.WriteLine("按任意键,清除A的值");
Console.ReadLine();
_abc = null;//释放A所占的内存
if (_abc == null)
Console.WriteLine("A==null");
else
Console.WriteLine("A的值为:{0}", _abc.A);
Console.WriteLine("按任意键,回收A");
Console.ReadLine();
GC.Collect();//启动垃圾回收机制,回收不需要的对象A
Console.ReadLine();
}
}
上述代码说明:
1.构造函数在类实例化的时候被触发
2.析构函数在类被回收的时候触发
class Program
{
static void Main(string[] args)
{
Third third = new Third();
third = null;
GC.Collect();
Console.ReadLine();
}
}
public class First // 基类First
{
public First()
{
Console.WriteLine("~First()构造函数");
}
~First() // 析构函数
{
Console.WriteLine("~First()析构函数");
}
}
public class Second : First // Second类从First类派生
{
public Second()
{
Console.WriteLine("~Second()构造函数");
}
~Second() // 析构函数
{
Console.WriteLine("~Second()析构函数");
}
}
public class Third : Second // Third类从Second类派生
{
public Third()
{
Console.WriteLine("~Third()构造函数");
}
~Third() // 析构函数
{
Console.WriteLine("~Third()析构函数");
}
}
上述代码说明:
1.子类的生成和回收会触发父类的构造函数和析构函数
2.构造函数的调用从父类开始,二析构函数则相反