mscorlib源流应该抛出StackOverflowException

时间:2014-12-23 14:01:19

标签: c# stream stack-overflow mscorlib

我在.net源代码中更具体地读取了mscorlib源代码,我停下来查看Stream类是如何实现的,一切都很好,直到我看到这行代码:

public static readonly Stream Null = new NullStream();

然后我认为“所以NullStream是从Stream等待派生的,不应该抛出异常吗?”。

这是我的想法: codeflow 这是sourcecode 流的路径是:

项目 - > mscorlib程序 路径=>系统/ IO / stream.cs

1 个答案:

答案 0 :(得分:1)

此代码需要StackOverflowException:

public readonly Stream Null=new NullStream()

因为调用NullStream构造函数会调用Stream构造函数(父类),它必须初始化Null字段,然后调用NullStream()....
但嘿,它是静止的!静态字段的初始化只进行一次,在创建任何对象之前,调用NullStream()将调用Stream(),但后者不会初始化Null,因为构造函数不会初始化静态字段(静态构造函数除外)不在这里。) 即使我们有静态构造函数,它也只能在创建任何对象之前调用一次。

相关问题