构造函数 主要用于创建类的实例对象。当调用构造函数创建一个对象时,构造函数会为对象分配内存空间,并初始化类的成员。构造函数分为实例构造函数和静态构造函数两种。
1.实例构造函数
实例构造函数用于创建和初始化类的实例。使用new运算符创建对象的过程,其实就是在调用实例构造函数,来初始化类中所有实例成员。如下:
public class Person { private string name; //实例构造函数 public Person () { name = "Learning Hard"; } }
构造函数有以下特点:
① 构造函数可以进行方法重载。实现了方法重载,就可通过不同的方式来完成类的实例化。
② 如果没有为类显式地定义一个构造函数,则c#编译器会自动生成一个函数体为空的默认无参的实例构造函数。
③ 可以对实例构造函数指定访问级别,即可以使用public、protected和private修饰符来修饰,然而不是任何一个
函数都可以成为实例构造函数,实例构造函数必须满足以下两个条件。
1.构造函数必须和类同名。
2.构造函数不允许有返回类型。
如下:
class Person { private string name; public string Name { get { return name; } } public Person () { name = "Learning Hard"; } public Person (string name) { this.name = name; } }
static void Main(string[] args) { Person personWithoutPara = new Person(); Person personWithPara = new Person("肖磊"); Console.WriteLine(personWithoutPara.Name); Console.WriteLine(personWithPara.Name); Console.Read(); }
2.静态构造函数
静态构造函数用于初始化类中的静态成员,在创建第一个实例或引用任何静态成员之前,CLR都将自动调用静态构造函数。如下:
class Person { private static string name; //静态构造函数,仅执行一次 static Person() { Console.WriteLine("静态构造函数被调用了"); name = "赵雷舅舅"; } public static string Name { get { return name; } } }
static void Main(string[] args) { Console.WriteLine(Person.Name);
Console.WriteLine(Person.Name);
Console.Read(); }
如上,两次调用了Person对象的静态Name属性,但只输出了一次“静态构造函数被调用了”的语句,这足以说明静态构造函数与
实例构造函数的不同之处--静态构造函数只执行一次。与实例构造函数一样,要成为静态构造函数必须具有以下特点。
① 静态构造函数不能使用任何访问修饰符。
② 静态构造函数不能带有任何参数。
③ 静态构造函数只会执行一次。
④ 不能直接调用静态构造函数。
⑤ 在程序中,程序员无法控制执行静态构造函数的时机。