C#|构造函数(一)

一、构造函数
构造函数,一种特殊的方法,用来在创建对象时初始化对象.
1、默认构造函数
我们在定义类时,如果没有显示的定义构造函数,那么类会有一个默认的无参数构造函数,例:
public class Father
{ }
Father f=new Father(); //这里调用的就是默认的构造函数,但如果构造函数是protected或者private时则不一定能初始化了
2、自定义构造函数
当然,我们也可以自己定义构造函数,如果有自定义构造函数,那么则不会再有默认的构造函数,除非自己再定义,例:
public class Father
{
public Father(String str)
{
Console.WriteLine(str);
}
}
Father f1=new Father(); //这样是报错的,因为并没有无参数的构造函数
Father f2=new Father("初始化参数"); //这样使用是没有问题的
public class Father
{
public Father()
{
Console.WriteLine("无参数构造函数");
}
public Father(String str)
{
Console.WriteLine(str);
}
}
Father f1=new Father(); //这样就可以了
Father f2=new Father("初始化参数"); //这样使用是没有问题的
public class Father
{
public Father(String str)
{
Console.WriteLine(str);
}
}
Father f1=new Father(); //这样是报错的,因为并没有无参数的构造函数
Father f2=new Father("初始化参数"); //这样使用是没有问题的
public class Father
{
public Father()
{
Console.WriteLine("无参数构造函数");
}
public Father(String str)
{
Console.WriteLine(str);
}
}
Father f1=new Father(); //这样就可以了
Father f2=new Father("初始化参数"); //这样使用是没有问题的
3、静态构造函数
静态构造函数,用于初始化任何静态成员变量,或者用于执行仅需执行一次的操作,在初始化任何一个实例或者引用任何静态成员变量之前,将会自动调用静态构造函数
public class Father
{
static Father()
{
Console.WriteLine("静态构造函数!只执行一次…");
}
static void StaticMethod()
{
Console.WriteLine("调用静态方法!");
}
}
Father f1=new Father(); //这里执行一次静态构造函数下面就再也不执行了,总之,在第一次操作有关该类时会自动调用
Father f2=new Father();
4、构造函数和继承关系
1)、父类有非私有的无参数构造函数
public class Father
{
public Father()
{
Console.WriteLine("非私有的无参数构造函数");
}
public Father(String str)
{
Console.WriteLine("非私有的有参数构造函数");
}
}
public class Child:Father
{}
Child c=new Child();
这样我们在定义子类时,可以不定义构造函数,默认会继承父类的无参数构造函数,当然,我们也可以自己再定义子类的构造函数,例如:
public class Child:Father
{
public Child(String str)
{
Console.WriteLine(str);
}//这是重写父类的有参数构造函数,当然也可以调用父类的有参数构造函数
public Child(String str):base(str)
{}
}
总结:对于父类的非私有的无参数的构造函数,子类可以隐示的继承,但是对于非无参数构造函数则必须显示的继承
2)、父类有私有的无参数构造函数
public class Father
{
private Father()
{
Console.WriteLine("私有的无参数构造函数");
}
public Father(String str)
{
Console.WriteLine("非私有的有参数构造函数");
}
}
//这时,如果我们定义的子类中没有构造函数,是报错的,因为无法隐示的继承父类私有的无参数构造函数,下面这个是编译不通过的
public class Child:Father
{}
重写:这时,如果我们要继承父类,必须要调用父类中非私有的构造函数,下面是正确的:
public class Child:Father
{
public Child(String str):base(str)
{}
}
3)、父类中没有无参数的构造函数
其实这种情况和第2种应该是类似的,不再详述!
【C#|构造函数(一)】

    推荐阅读