【发布时间】:2017-08-15 20:01:11
【问题描述】:
根据this StackOverflow question,可以使用Type.IsAbstract 和Type.IsSealed 属性来确定一个类是否是静态的。但是,请看以下测试:
[Fact]
public void ActivatorNotAbstract()
{
var activatorType = typeof(Activator);
Assert.True(activatorType.IsClass);
Assert.True(activatorType.IsSealed);
Assert.True(activatorType.IsAbstract);
}
尽管System.Activator 被定义为静态类,但该测试失败,因为最后一个断言不正确。这对于 .NET Core 2.0(可能还有以前的版本)以及 .NET 4.5(可能还有其他版本)都是如此。你也可以在this GitHub repo找到上面的测试。
为什么Activator 在这方面很特别?我在 BCL 中找不到任何其他具有这种行为方式的静态类。
卡米洛回答后编辑
你说得对,我没有看透——在 .NET 中,该类实际上是密封的:
但是,从 .NET Core 元数据来看,它似乎是静态的:
现在,实际的问题应该是:为什么Activator 在 .NET Core 中显示为静态类(顺便说一句,在 NetStandard 中也是如此),但实际上是密封类?
【问题讨论】:
标签: c# .net reflection .net-core