代码之家  ›  专栏  ›  技术社区  ›  Sorskoot

内部构造函数

  •  6
  • Sorskoot  · 技术社区  · 17 年前

    昨天我认为在WPF应用程序中实现自己的触发器会很好。我创建了一个继承了TriggerBase的类MyTrigger。TriggerBase是一个公共抽象类。所以继承不是问题。但是这个类中的构造函数被标记为internal。编译器抛出错误,因为没有有效的构造函数。为什么有人创建公共类,但将构造函数标记为内部类?

    3 回复  |  直到 17 年前
        1
  •  10
  •   Jon Skeet    17 年前

    如果你想让类可见,但只允许它在你自己的程序集中被子类化。子类本身可能有公共构造函数,也可能通过工厂访问。

    我无法评论这是否是WPF中TriggerBase的一个好的设计决策,但至少在某些情况下是合理的。

        2
  •  5
  •   Joseph Ferris    17 年前

    我能想到的一个原因是,新实例的实际创建将由同一程序集中的另一个公共类处理。这将迫使您通过另一个类创建实例——可能是某种工厂模式实现。

        3
  •  2
  •   Sean    17 年前

    它是公共的,因为它被用作WPF附带的触发器(触发器、多触发器、EventTrigger、DataTrigger等)的基类。如果它不是公开的,那么你就无法将这些类标记为公开。

    构造函数是内部的,因为它们不打算让你自己使用。我猜你应该从上面提到的类中派生出来。

    推荐文章