C# 构造函数
- 构造函数的基本概念:构造函数是类名相同且没有返回类型的特殊方法,它在创建类的对象时自动调用。
- 构造函数的类型:C# 支持多种类型的构造函数,包括无参构造函数、带参构造函数、默认构造函数、拷贝构造函数、私有构造函数和静态构造函数。
- 构造函数重载:在 C# 中,可以根据参数的不同重载构造函数,提供不同方式的对象初始化。
在 C# 中,构造函数类似于当类的对象被创建时调用的方法。
然而,与方法不同的是,构造函数:
- 与类名相同
- 没有任何返回类型
创建 C# 构造函数
下面是在 C# 中创建构造函数的方法:
class Car {
// 构造函数
Car() {
// 代码
}
}
这里,Car()
是一个构造函数。它与其类名相同。
调用构造函数
一旦我们创建了构造函数,就可以使用 new
关键字来调用它。例如,
new Car();
在 C# 中,当我们尝试创建类的对象时,会调用构造函数。例如,
Car car1 = new Car();
这里,我们调用 Car()
构造函数来创建对象 car1
。要了解更多关于对象的信息,请访问 C# 类和对象。
构造函数类型
有以下几种类型的构造函数:
- 无参构造函数
- 带参构造函数
- 默认构造函数
1. 无参构造函数
当我们创建没有参数的构造函数时,称为无参构造函数。例如,
using System;
namespace Constructor {
class Car {
// 无参构造函数
Car() {
Console.WriteLine("Car 构造函数");
}
static void Main(string[] args) {
// 调用构造函数
new Car();
Console.ReadLine();
}
}
}
输出
Car 构造函数
在上述示例中,我们创建了名为 Car()
的构造函数。
new Car();
我们可以通过在构造函数名称前添加 new
关键字来调用构造函数。
2. C# 带参构造函数
在 C# 中,构造函数也可以接受参数。这被称为带参构造函数。例如,
using System;
namespace Constructor {
class Car {
string brand;
int price;
// 带参构造函数
Car(string theBrand, int thePrice) {
brand = theBrand;
price = thePrice;
}
static void Main(string[] args) {
// 调用带参构造函数
Car car1 = new Car("Bugatti", 50000);
Console.WriteLine("品牌: " + car1.brand);
Console.WriteLine("价格: " + car1.price);
Console.ReadLine();
}
}
}
输出
品牌: Bugatti
价格: 50000
在上述示例中,我们创建了名为 Car()
的构造函数。该构造函数接受两个参数:theBrand
和 thePrice
。
注意这条语句,
Car car1 = new Car("Bugatti", 50000);
在这里,我们向构造函数传递了两个值。
传递给构造函数的值被称为参数。我们必须传递与参数相同数量和类型的值。
3. 默认构造函数
如果我们在类中没有定义构造函数,C# 将自动创建一个带有空代码且无参数的默认构造函数。例如,
using System;
namespace Constructor {
class Program {
int a;
static void Main(string[] args) {
// 调用默认构造函数
Program p1 = new Program();
Console.WriteLine("a 的默认值: " + p1.a);
Console.ReadLine();
}
}
}
输出
a 的默认值: 0
在上述示例中,我们没有在 Program
类中创建任何构造函数。然而,在创建对象时,我们正在调用构造函数。
Program p1 = new Program();
这里,C# 自动创建了一个默认构造函数。默认构造函数会将任何未初始化的变量初始化为默认值。
因此,我们得到 int
变量 a
的值 0。
注意:在默认构造函数中,所有数值字段初始化为 0,而字符串和对象初始化为 null。
4. C# 中的拷贝构造函数
我们使用拷贝构造函数通过从另一个对象复制数据来创建对象。例如,
using System;
namespace Constructor {
class Car {
string brand;
// 构造函数
Car (string theBrand) {
brand = theBrand;
}
// 拷贝构造函数
Car(Car c1) {
brand = c1.brand;
}
static void Main(string[] args) {
// 调用构造函数
Car car1 = new Car("Bugatti");
Console.WriteLine("car1 的品牌: " + car1.brand);
// 调用拷贝构造函数
Car car2 = new Car(car1);
Console.WriteLine("car2 的品牌: " + car2.brand);
Console.ReadLine();
}
}
}
输出
car1 的品牌: Bugatti
car2 的品牌: Bugatti
在上述程序中,我们使用了拷贝构造函数。
Car(Car c1) {
brand = c1.brand;
}
这里,这个构造函数接受一个 Car
对象作为其参数。因此,在创建 car2
对象时,我们将 car1
对象作为参数传递给拷贝构造函数。
Car car2 = new Car(car1);