我也读到了用于实施一些设计模式虚拟的构造函数,但没有理解的任何需要虚拟构造函数。 那么,什么是虚拟构造函数和为什么我们真的需要他们?
Answer 1:
在大多数编程语言,据我所知,你不能找到虚拟构造函数。 其覆盖虚拟成员在运行时被评估对象的构造后,但在大多数语言中,你需要知道实际的类创建实例时。 因此虚拟构造函数使这些语言没有意义。
在.NET中,你可以通过反射类似的解决方案,即你可以通过一个表示要构造对象类型的类的实例构造一个对象。 并与通用的支持,你也可以达到类似的东西,但它不是虚拟的构造函数。
与具有真正的虚拟构造,我已经工作过的唯一的编程语言是德尔福。 在Delphi,有一个特定的“元类型”,即一个特定的编程构造表示元类(而在.NET,元类,所述Type
类,只是一个普通的类的一个实例)。 所以,如果你有一个叫做类TMyClass
- Deplhi命名约定;)
TMyClass : Class ...
你可以声明这样的元类
TMyMetaClass : class of TMyClass
现在,你可以声明一个变量是TMyMetaClass
类型,
MyMetaClassVariable : TMyMetaClass
...
// Assign the meta class to refer to our concrete class
MyMetaClassVariable := TMyClass;
你可以通过这个变量构造一个新的实例
MyClassInstance := MyMetaClassVariable.Create();
现在, MyMetaClassVariable
可以指任何类,或者是TMyClass
或其专业化。 如果构造被声明虚拟的,则该变量将被与该特定类的实例构造。
以同样的方式,你可以声明在Delphi的虚拟静态方法,并呼吁他们通过元类的实例。
所以其他的问题吗? 为什么我们需要它们? 那么,在Delphi中,他们解决一些相同的问题Type
的.NET类,允许你构造对象,你不知道在设计时的类名。 例如,当你设计一个表格,你把一堆的控制,这个数据必须由设计师进行序列化,和反序列化。 当表单被反序列化,然后它实际上是被读出的元类型,和正确的情况下(无论是TextBox
, ComboBox
,等等)通过调用元类型的虚拟构造被构造。
文章来源: Where virtual constructors are used?