C#中的构造函数
任何时候,只要创建类和结构就会调用构造函数,类和结构都有一个默认的构造函数。类和结构都可以有多个构造函数,每个构造函数都带有不同的参数。
类中的构造函数:构造函数是在创建特定对象时的类方法。构造函数具有和类相同的名称,它通常初始化新对象的数据称成员。因为c#中不允许使用未初始化的变量。
所以类中的数据成员在没有其他的构造函数初始化数据时默认构造函数会按照默认值初始化数据。
|
值类型 |
默认值 |
|---|---|
|
bool |
false |
|
byte |
0 |
|
char |
'\0' |
|
decimal |
0.0M |
|
double |
0.0D |
|
enum |
表达式 (E)0 产生的值,其中 E 为 enum 标识符。 |
|
float |
0.0F |
|
int |
0 |
|
long |
0L |
|
sbyte |
0 |
|
short |
0 |
|
struct |
将所有的值类型字段设置为默认值并将所有的引用类型字段设置为 null 时产生的值。 |
|
uint |
0 |
|
ulong |
0 |
|
ushort |
0 |
1 public class Animal
2 {
3 public bool isInitialized;
4
5 public Animal()
6 {
7
8 }
9 }
10
11
12 Animal animal = new Animal();
第3行显示构造函数,不带参数的构造函数--即默认的构造函数。如果不写此构造函数,c#默认的也会处理(静态构造函数除外),效果一样。在12行创建对象时构造函数就会初始化类Animal的数据,像isInitialized会初始化为false,可以测试。
Console.WriteLine(cat.isInitialized); //输出False
实例构造函数
代码
public class Animal
{
public bool isInitialized;
public string name;
public int age;
public Animal()
{
this.isInitialized = true;
}
public Animal(string name, int age)
{
this.name = name;
this.age = age;
}
}
Animal cat = new Animal("Cat",3);
Console.WriteLine(cat.isInitialized); //输出True
Console.WriteLine("Animal name's {0},age is {1}", cat.name, cat.age);
私有构造函数
私有构造函数是一种特殊的实例化构造函数,它通常只用在包含静态成员的类中。
私有构造函数可以阻止类被实例化。
代码
1 public class Animal
2 {
3 private static int animalCount = 10;
4 private Animal()
5 {
6
7 }
8
9 public static int AnimalCount()
10 {
11 return ++animalCount;
12 }
13 }
14
15 Console.WriteLine(Animal.AnimalCount());
此类不能实例化,如果Animal animal = new Animal();会发生错误,提示类是受保护的。
调用本类的其他的构造函数
代码
1 namespace ConsoleApplication1
2 {
3 class Program
4 {
5 static void Main(string[] args)
6 {
7 Animal animal = new Animal("Cat",3,"China");
8 animal.Show();
9 }
10 }
11
12 public class Animal
13 {
14 private string name;
15 private int age;
16 private string productarea;
17
18 public Animal()
19 {
20
21 }
22
23 public Animal(string name, int age)
24 {
25 this.name = name;
26 this.age = age;
27 }
28
29 public Animal(string name, int age, string productarea):this(name,age)
30 {
31 this.productarea = productarea;
32 }
33
34 public void Show()
35 {
36 Console.WriteLine("Animal name is {0},age is {1},product area is {2}",this.name,this.age,this.productarea);
37 }
38 }
39 }
调用基类的构造函数,用base,和用this调用其他的构造函数一样。
结构(Struct)和类的构造函数基本上一致,只是不能显示的调用构造函数。

浙公网安备 33010602011771号