1

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

public static readonly Stream Null = new NullStream();

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

这就是我的想法: 代码流 这是 流路径的源代码:

项目->mscorlib 路径=>system/io/stream.cs

4

1 回答 1

1

这段代码预计会出现 StackOverflowException:

public readonly Stream Null=new NullStream()

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

于 2014-12-23T14:23:12.937 回答