Welcome

首页 / 软件开发 / C# / C#静态构造函数与抽象类构造函数的面试题

C#静态构造函数与抽象类构造函数的面试题2013-11-13 博客园 alert(dong)前段时间找工作,去面试碰到了两道关于C#构造函数的题目,首先来看静态构造函数的题目如下(原题不 是如此,但类似,因为实在记不住那题目的样子了,第二题也是):

class Base{static Base(){Console.WriteLine("Static Base");}public Base(){Console.WriteLine("Base");}}
问当创建Base的实例时产生什么输出?我咋一看,挺简单,我当时认为:构造函数为类的成员 ,实例化自然是只用到了实例成员,关静态成员鸟事,什么烂题目。于是写“Base”。写归写,后来还是有点 怀疑(对于不完全确认的程序我还是喜欢自己编码验证),于是乎发现真的是我错了。去new一个类的实例时 确实先调用了静态构造函数(如果存在),那么到底什么时候调用呢,是在声明的时候(Base b = null;)还 是实例化的时候(b = new Base();)调用呢?我觉得是是声明的时候,然后接着又发现了自己还是错了。啰嗦有 点多了,大家可以上MSDN查看关于静态构造函数的官方说明:http://msdn.microsoft.com/zh- cn/library/k9x6w0hc(v=vs.80).aspx

接下来我还有一个疑问,就是在继承关系中这个静态构造函数的 父子类调用情况如何呢?我不敢妄下结论了,老错。

继续编写代码添加一个子类

class Child : Base{static Child(){Console.WriteLine("Static Child");}public Child(){Console.WriteLine("Child");}}
这时候我去new一个Child对象,输出如下:

我去,跟实例构造函数的调用 顺序刚好相反,其所有构造函数的调用顺序为:本身静态构造函数 -> 父类静态构造函数 -> 父类实例 构造函数 -> 本身实例构造函数。

这个东西貌似实用性不是太大,但是在一个含有静态成员的类里 面,还是可以有不少的用武之地的。