【发布时间】:2013-10-24 15:16:52
【问题描述】:
我在某处读过
“Abstract 和 Sealed 修饰符等价于静态类”
我也发现了
“当你声明一个静态类时,编译器在内部标记类抽象和密封,并在IL代码中创建一个私有构造函数”
所以,我决定这样做:
static class A
{
public static void test()
{
Console.WriteLine("test");
}
}
现在,“A”类不能被继承也不能被实例化。
所以,让我们写一个class B 使用abstract 来防止实例化并使用sealed 来防止继承。
但是,这种方法失败了。
应该等价于
public abstract sealed class B
{
private B()
{
}
public void test()
{
Console.WriteLine("test");
}
}
But I recieve an error stating "error CS0418:B': 一个抽象类不能是密封的或静态的"`。任何想法为什么这是不可能的?
提前感谢您的回答。
【问题讨论】:
-
为什么要抽象密封类?这没有任何意义。
-
我不想要它。我只是在检查这些修饰符是否等同于所说的静态类。
-
编译器做的不一定让开发者遵循
-
编译器不允许您执行
abstract sealed class,即使这相当于static class所做的。它希望您使用static class来执行此操作。 -
当你把
abstract sealed class翻译成VB.NET你得到MustInherit CannotInherit Class
标签: c# oop .net-4.0 static abstract-class