now*_*ed. 6 c# oop static abstract-class .net-4.0
我在某处读到了
"抽象和密封修饰符相当于一个静态的类"
我也发现了
"当你声明一个静态类时,编译器在内部标记类抽象并密封,并在IL代码中创建一个私有构造函数"
所以,我决定这样做:
static class A
{
public static void test()
{
Console.WriteLine("test");
}
}
Run Code Online (Sandbox Code Playgroud)
现在,类"A"不能被继承或实例化.
所以,让我们写class B
使用abstract
,以防止实例化和使用sealed
,防止继承.
但是,这种方法失败了.
这相当于
public abstract sealed class B
{
private B()
{
}
public void test()
{
Console.WriteLine("test");
}
}
Run Code Online (Sandbox Code Playgroud)
But I recieve an error stating "error CS0418:
B':抽象类不能被密封或静态"`.任何想法为什么这是不可能的?
提前感谢您的回答.
Dav*_*rno 11
检查了System.Directory类的IL(它是静态的)后,它在IL中声明为:
.class public auto ansi abstract sealed beforefieldinit System.IO.Directory
extends System.Object
{
...
Run Code Online (Sandbox Code Playgroud)
此外,本文(http://msdn.microsoft.com/en-us/library/ms229038.aspx)建议CLR将静态类作为抽象密封类处理,以支持不支持直接删除静态类的语言(例如C++) ).
因此,总之,C#中的静态类是具有私有构造函数的密封抽象类的语法糖.我很高兴,因为"静态"更容易编写,更容易正确.
归档时间: |
|
查看次数: |
3972 次 |
最近记录: |