我在.net源代码中更具体地读取了mscorlib源代码,我停下来查看Stream类是如何实现的,一切都很好,直到我看到这行代码:
public static readonly Stream Null = new NullStream();
然后我认为“所以NullStream是从Stream等待派生的,不应该抛出异常吗?”。
这是我的想法: 这是sourcecode 流的路径是:
项目 - > mscorlib程序 路径=>系统/ IO / stream.cs
答案 0 :(得分:1)
此代码需要StackOverflowException:
public readonly Stream Null=new NullStream()
因为调用NullStream构造函数会调用Stream构造函数(父类),它必须初始化Null字段,然后调用NullStream()....
但嘿,它是静止的!静态字段的初始化只进行一次,在创建任何对象之前,调用NullStream()将调用Stream(),但后者不会初始化Null,因为构造函数不会初始化静态字段(静态构造函数除外)不在这里。)
即使我们有静态构造函数,它也只能在创建任何对象之前调用一次。