由c#继承可以看到 在初始化一个子类的时候 都会有一个父类在子类初始化之前被建立出来
之后子类才会去继承这个父类的各项 所以说初始化的父类中的成员都会传给子类 默认调用的父类构造函数是无参的构造函数 而如果没有或是被覆盖了 那就需要子类的构造函数来指定了
用 base() 来指定
否则编译器会报错
Demo
class A
{
public int num { get; set; }
//public A()
//{
// Console.WriteLine(111);
//}
public A(int i)
{
num = i;
Console.WriteLine(i);
}
}
class B : A
{
public B(int i)
//应改为 public B(int i):base(5) 解决了之下所指出的错误
{
Console.WriteLine(this.num);
}
}
class Program
{
static void Main(string[] args)
{
B b = new B(666);//
此处报错 为A不包含 有零个参数的构造函数
Console.ReadLine();
}
}
就是初始化静态成员
比如有几个静态成员需要初始化
那你把初始化代码放到哪呢?
放到普通构造函数里,那肯定不行。因为静态成员没有创建实例就要可用。
专门建一个static public方法来初始化?这样用起来非常不方便,你需要在“第一次”使用静态成员前先调用这个方法。
如果你在使用静态成员前忘了调用该方法,会导致错误。
如果重复调用,又是冗繁操作。
所以静态构造函数就派上用场了。
它会在你第一次调用静态成员(或创建实例)的时候自动被调用
下面是MSDN对静态构造函数特点的描述:
1.静态构造函数既没有访问修饰符,也没有参数
2.在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类
3.无法直接调用静态构造函数
4.在程序中,用户无法控制何时执行静态构造函数
记得在c#构造函数中将属性的初始化写进去 否则属性的值为null是不能用的