我阅读了 .net 源代码,更具体地说是 mscorlib 源代码,我停下来看看 Stream Class 是如何实现的,一切都很好,直到我看到这行代码:
public static readonly Stream Null = new NullStream();
然后我认为“所以 NullStream 派生自 Stream 等待不应该抛出异常吗?”。
这就是我的想法:
这是
流路径的源代码:
项目->mscorlib 路径=>system/io/stream.cs
我阅读了 .net 源代码,更具体地说是 mscorlib 源代码,我停下来看看 Stream Class 是如何实现的,一切都很好,直到我看到这行代码:
public static readonly Stream Null = new NullStream();
然后我认为“所以 NullStream 派生自 Stream 等待不应该抛出异常吗?”。
这就是我的想法:
这是
流路径的源代码:
项目->mscorlib 路径=>system/io/stream.cs
这段代码预计会出现 StackOverflowException:
public readonly Stream Null=new NullStream()
因为调用 NullStream 构造函数将调用 Stream 构造函数(父类),该构造函数必须初始化 Null 字段,然后调用 NullStream()....
但是嘿,它是静态的!静态字段的初始化只在创建任何对象之前完成一次,调用 NullStream() 将调用 Stream() 但后者不会初始化 Null 因为构造函数不初始化静态字段(除了我们没有的静态构造函数这里)。
即使我们有静态构造函数,它也只在创建任何对象之前调用一次。