2008-12-16 107 views
5

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

回答

9

如果您希望该类可见,但只允许它在您自己的程序集中进行子类化。这些子类本身可能有公共构造函数 - 或者它们可能会被工厂访问。

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

5

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

2

它是公开的,因为它用作带有WPF(触发器,MultiTrigger,EventTrigger,DataTrigger等)的触发器的基类。它不是公开的,那么你将无法将这些类标记为公共。

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