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