【问题标题】:how to prevent base constructor to be called when a child is instantiated?如何防止在实例化孩子时调用基本构造函数?
【发布时间】:2014-09-15 16:17:05
【问题描述】:

如何防止在子实例化时调用基本构造函数? 我在 C# WPF 中使用三个继承级别进行编码,如下所示:

SonClass -> FatherClass -> GrandFatherClass

一旦我从 SonClass 实例化,FatherClass 和 GrandFatherClass 的构造函数就会被自动调用,有什么方法可以阻止它或从下往上而不是自上而下更改顺序?

【问题讨论】:

  • 我认为你的构造函数可能做的太多了。
  • base (father) 构造函数在创建子类的实例时总是会执行,你可以在基类构造函数中传递一个参数给 not在基类构造函数中执行一些代码,但不能限制基类构造函数的执行。
  • 看看下面的问答,了解 C# 中类的构造函数的一些规则:stackoverflow.com/questions/12138221/…

标签: c# wpf inheritance


【解决方案1】:

不能这样做。

根据定义,当创建派生对象时,基类的构造函数也会运行。

您可以指定运行哪个基类构造函数:

public MyDerivedClass() : base() //Or some args to pick an overload

但是你不能阻止它被调用。这是一个问题的事实意味着您在构造函数中做了很多工作。构造函数应该用于初始化成员变量和简单的初始化逻辑。任何长时间运行的操作或复杂的逻辑都应该在其他方法中。

这种逻辑通常放在virtual“Init”方法中,这样派生类就可以覆盖初始化行为。

【讨论】:

  • 谢谢,虚拟关键字帮助了 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 1970-01-01
  • 2013-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-06
相关资源
最近更新 更多