昨天看到了一道面试题,之前曾经遇到过,但是没有深究,导致类代码执行顺序这一块至今很茫然。不过经过我反复查资料和实验,发现茫然有理:因为类代码执行顺序没有必然的谁谁是第一步执行,谁是第二步,谁是...造成这个局面的,就是静态成员。
静态构造函数只会被执行一次,而且是在创建此类的第一个实例或引用任何静态成员之前,由.NET自动调用。 正是这造成的类代码执行顺序有不确定性,但是还有硬性的先后顺序,只是不能说具体说静态成员一定是在第几部执行。
可以总结规律如下几条:
1.类静态成员初始化在静态构造函数(如果有)前执行。
2.类实例成员初始化在实例构造函数前执行。
3.紧邻父类(如果有)实例构造函数在子类实例构造函数前执行。
根据上面,能发现如果实例化一个子类对象,那么在调用子类实例构造函数前(步骤A),会先调用父类构造函数(步骤B),在步骤B之前,还需要判断父类是否有类静态成员和静态构造函数,(如果二者都有)就按照上述第1条规则。如果父类有类实例成员和实例构造函数,则按第2挑规则执行。如果父类还有父类...依然如此。