1.默认构造函数:如果类中没有定义构造函数那么程序会默认的为类创建一个无参数构造函数用以对类进行实例化,如果有构造函数的话,那么程序就不会创建默认构造函数
2静态构造函数,不能访问实例成员,只能用来初始化一些静态字段或者属性,仅在第一次调用类的任何成员时自动执行,不带访问修饰符,不带任何参数,每个类只能有一个静态构造函数,但可以同时还有一个无参实例构造函数,
3.私有构造函数:把访问的属性设置为私有,那么外部就不能通过new进行实例化访问类中的成员,可以在类的内部声明静态变量属性,进行实例化,通过静态构造方法,对类进行赋值优点如下:
- 永远不会实例化,因为它仅用作某些静态成员的容器
- 希望类只能通过调用某个静态方法来实例化(即所谓的对象实例化的类工厂方法)
构造函数的执行顺序:通常情况下实例化子类的时候,都是先执行父类的构造方法,然后执行子类的构造方法。但是对于子类当中有静态构造方法的时候会先执行子类当中的静态构造方法然后执行父类当中的静态构造方法,之后执行父类的构造方法,最后执行子类的构造方法,而且静态构造方法在程序运行的过程当中都只会执行一次
事例如下:
public class SuperClass { static SuperClass() { Console.WriteLine("Super.Static"); } public SuperClass() { Console.WriteLine("Super.Instance"); } } //子类 public class ChildClass : SuperClass { static ChildClass() { Console.WriteLine("Child.Static"); } public ChildClass() { Console.WriteLine("Child.Instance"); } } //客户程序 class Program { static void Main(string[] args) { ChildClass cc = new ChildClass(); Console.ReadKey(); } }
运行结果为:Child.Static
Super.static
Super.Instance
Child.Instance
注意:在不考了静态构造函数的情况下(因为静态构造仅执行一次,且定义静态构造函数的时候并不多),子类在调用父类的构造函数时,默认情况是调用父类的无参构造函数,如果父类只有带参构造函数,而没有无参构造函数,那么编译时会报错;不过我们可以通过base关键字来指定调用带参构造函数,如下
public class SuperClass { public SuperClass(string param) { Console.WriteLine("Super:" + param); } } //子类 public class ChildClass : SuperClass { public ChildClass(string param):base(param) { Console.WriteLine("Child:" + param); } } //客户程序 class Program { static void Main(string[] args) { ChildClass cc = new ChildClass("param"); Console.ReadKey(); } }
转载自https://www.cnblogs.com/ArtofDesign/p/3603986.html 主要是为了大家一起打好基础