abstract class ClassStupid
{
public ClassStupid()
{
}
}
ClassStupid stupid = new ClassStupid(); //This is not possible. We can not create an Instance of Abstract Class.
我的问题是C#编译器中的MAGIC
是什么阻止程序创建一个抽象类的实例,尽管有一个构造函数。
来自我的Wiki
在面向对象的编程中,类中的构造函数(有时缩写为ctor)是在创建对象时调用的特殊类型的子例程。 准备新对象以供使用,通常接受构造函数用于设置首次创建对象时所需的任何成员变量的参数。它被称为构造函数,因为它构造了类的数据成员的值。
抽象类构造函数与Normal类构造函数有何不同?
答案 0 :(得分:3)
抽象类和非抽象类的构造函数没有区别;但是,这些类是不同的,编译器知道这一点。这就是禁止在帖子中显示的方式构造抽象类的原因:编译器只检查IsAbstract
标志,并在编译时禁止构造。
此外,CLR还有一个运行时标志,指示一个类是抽象的。这就是为什么你不能通过 reflection 在运行时实例化一个抽象类。