【问题标题】:Creating a derived control创建派生控件
【发布时间】:2008-10-31 14:25:26
【问题描述】:

我有一个抽象基类,它继承自UserControl,然后用于派生多个类。

我遇到的问题是如何优雅地确保为每一层类调用生成的函数InitializeComponent()

因此(抽象)基类上有许多控件,这些控件将为所有子类共享。在创建子类的实例时,首先调用基构造函数,但是有什么方法可以优雅地调用派生的InitializeComponent(),而不必为每个派生类有效地构建相同的构造函数

public DerivedClass() { 
  InitializeComponent();
}

我想知道是否有比在每个派生类中重复自己更有效的方法?

实际上,我希望(抽象)基类能够调用

Derived.InitializeComponent(); 

毕竟,当它在基本构造函数中(在调试中)时,它知道它是一个派生实例......

【问题讨论】:

    标签: c# .net-3.5 inheritance


    【解决方案1】:

    公共 DerivedClass() : base() {}

    这将调用你的基本构造函数,通常没有什么神奇的方法来做事,如果你需要调用 InitializeComponents,你可能不得不自己调用它。

    【讨论】:

      【解决方案2】:

      如果您将 InitializeComponent 设为虚拟,并为所有子类覆盖它,如果您从派生构造函数调用基构造函数,则基类将为每个子类调用正确的方法。

      【讨论】:

      • 有点危险...基类构造函数将调用最派生的虚拟实现。这意味着子类的 InitializeComponent 方法将在子类的构造函数本身之前被调用——对于任何将逻辑添加到子类构造函数的人来说,这是一个定时炸弹。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-13
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      • 2020-05-23
      相关资源
      最近更新 更多