c#构造函数和析构函数
时间: 2023-11-22 21:38:24 浏览: 34
构造函数(Constructor)是一种特殊的成员函数,它主要用于为对象分配存储空间,并对数据成员进行初始化,即对类进行初始化。构造函数的特点包括:
1. 构造函数的名字必须与类同名。
2. 构造函数没有返回类型,可以带参数,也可以不带参数。
3. 在声明类对象时,系统会自动调用构造函数,构造函数不能被显式调用。
4. 构造函数可以重载,从而提供初始化类对象的不同方式。
5. 如果在声明时未定义构造函数,系统会自动生成默认的构造函数,此时构造函数的函数体为空。
构造函数分为实例构造函数、私有构造函数和静态构造函数:
1. 实例构造函数是实现对类中实例进行初始化的方法成员。
示例:
```csharp
public class Cat {
int i = 4;
public Cat() {
Console.WriteLine("The cat: " + i);
}
static void Main(string[] args) {
Cat cat = new Cat();
Console.ReadLine();
}
}
```
2. 私有构造函数是一种特殊的实例构造函数,通常用在只包含静态成员的类中。如果类具有一个或多个私有构造函数而没有公共构造函数,则其他类无法创建该类的实例。
示例:
```csharp
public class Dog {
private Dog() {
Console.WriteLine("this is dog");
}
}
public class Cat {
int i = 4;
private Cat() {
Console.WriteLine("The cat: " + i);
}
static void Main(string[] args) {
Dog dog1 = new Dog(); // 不可访问,受保护级别限制而无法实例化
Cat cat1 = new Cat();
Console.ReadLine();
}
}
```
3. 静态构造函数是实现对一个类进行初始化的方法成员,一般用于对静态数据的初始化。静态构造函数不能有参数,不能有修饰符,也不能被调用,当类被加载时,类的静态构造函数会自动被调用。
示例:
```csharp
public class Dog {
static int i = 1;
static Dog() {
Console.WriteLine("the dog 默认构造函数 i=" + i);
}
}
public class Cat {
static void Main(string[] args) {
Dog dog1 = new Dog();
Console.ReadLine();
}
}
```
析构函数(Destructor)在C#中没有与之对应的关键字,与构造函数相反,析构函数用于释放对象占用的资源。当对象被销毁时,析构函数会自动被调用。析构函数的特点包括:
1. 析构函数的名字与类名相同,但在类名前加上一个波浪线(~)以表示它是一个析构函数。
2. 析构函数没有参数,没有返回值,也不能重载。
3. 析构函数不能被显式调用,对象销毁时会自动调用析构函数。
4. 如果一个类没有定义析构函数,系统会自动生成一个默认的析构函数,其函数体为空。
回答完问题后,我还有几个