Silverlight 为什么选择器类具有内部构造函数?

Silverlight 为什么选择器类具有内部构造函数?,silverlight,silverlight-4.0,selector,Silverlight,Silverlight 4.0,Selector,我试图从选择器类派生,因为我需要与ListBox类似的功能,但它不是ListBox。 我看了选择器类的签名,它是(http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.selector(v=vs.95).aspx) 但问题是构造函数是内部的。因此,不可能在程序集外部从此类派生(ListBox和ComboBox在此程序集中) 现在,为了实现我的目标,我从列表框中派生,但我的问题是: 为什么选择器类是内部

我试图从选择器类派生,因为我需要与ListBox类似的功能,但它不是ListBox。 我看了选择器类的签名,它是(http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.selector(v=vs.95).aspx)

但问题是构造函数是内部的。因此,不可能在程序集外部从此类派生(ListBox和ComboBox在此程序集中)

现在,为了实现我的目标,我从列表框中派生,但我的问题是:


为什么选择器类是内部构造函数?

因为
选择器
类是
抽象的
。您不能创建抽象类的实例,要确保您甚至不能(以常规方式)错误地创建抽象类,最简单的方法是不使用构造函数

我在MSDN上没有看到构造函数的条目,但我敢打赌它可能是一个受
保护的
构造函数,而不是
内部
构造函数

但在我看来,没有什么能阻止您从
选择器
派生,并创建自定义实现

编辑:
Reflector显示构造函数实际上是
内部的
,因此没有派生…

嗨,这是不可能的。因为如果你想从一个类派生,c'tor必须是可访问的。示例:公共抽象类MyClass{private MyClass(){}}公共类MySecondClass:MyClass{}@TerenceJackson:这就是我更新答案的原因(请参见“编辑”);)有点奇怪,通常要做的是创建一个受保护的构造函数。我的猜测是,设计者明确要求类不可继承,因此选择将其设置为内部而不是受保护的。Sry作为注释;)我已经在打字了,不认识你的编辑。我觉得奇怪的是,类是公共的,但c'tor不是受保护的或公共的…@TerenceJackson:答案的第一部分已经介绍了这一点:让抽象类只实现受保护的构造函数是一种很好的设计实践,以避免以常规方式“更新”实例的可能性。类(及其子类)本身可能会公开公共behvaiur,因此需要将其公开。有更多的类是公共的,没有公共构造函数。设计者的第一个意图可能是消除子体在其程序集之外的可能性,因此只能选择添加内部构造函数。
public abstract class Selector : ItemsControl, 
ISupportInitialize