【发布时间】:2008-12-16 10:26:27
【问题描述】:
昨天我认为在 WPF 应用程序中实现我自己的触发器会很好。我创建了一个继承 TriggerBase 的类 MyTrigger。 TriggerBase 是一个公共抽象类。所以继承不是问题。但是这个类中的构造函数被标记为内部的。编译器会抛出一个错误,因为它不是有效的构造函数。为什么有人创建一个公共类但将构造函数标记为内部?
【问题讨论】:
昨天我认为在 WPF 应用程序中实现我自己的触发器会很好。我创建了一个继承 TriggerBase 的类 MyTrigger。 TriggerBase 是一个公共抽象类。所以继承不是问题。但是这个类中的构造函数被标记为内部的。编译器会抛出一个错误,因为它不是有效的构造函数。为什么有人创建一个公共类但将构造函数标记为内部?
【问题讨论】:
如果您希望类可见,但只允许在您自己的程序集中对其进行子类化。子类本身可能有公共构造函数 - 或者它们可以通过工厂访问。
我无法评论这对于 WPF 中的 TriggerBase 是否是一个好的设计决策,但至少在某些情况下是合理的。
【讨论】:
我能想到的一个原因是,新实例的实际创建将由同一程序集中的另一个公共类处理。这将迫使您通过这个其他类创建实例 - 可能是某种工厂模式实现。
【讨论】:
它是公共的,因为它用作 WPF 附带的触发器(Trigger、MultiTrigger、EventTrigger、DataTrigger 等)的基类。如果它不公开,那么您将无法将这些类标记为公开。
构造函数是内部的,因为它们不打算让您自己使用它。我猜你应该是从上面提到的类之一派生的。
【讨论】: