在c#中,这是:
static class foo
{
protected void doThing(); // CS1057
{
}
}
生成CS1057编译错误,因为静态类不支持继承。
为什么这是允许的呢?在这种情况下,protected
关键字的含义是什么?
static class foo
{
protected struct bar
{
}
}
这绝对是一个bug,我建议你把它归档。
ECMA-334, c#的官方规范,说下面的
15.2.2.4静态类
15.2.2.4.1一般剪断…
静态类声明受以下限制:
- 剪…
静态类的成员不能声明为protected
或protected internal
的可访问性。
不要告诉我这排除了嵌套类型,因为几行之后,嵌套类型被明确地排除在static
修饰符限制之外:
静态类的成员不是自动静态的,成员声明必须显式地包含
static
修饰符(常量和嵌套类型除外)。