我正在为我的WPF应用程序创建一个对话框窗口。我知道WPF要求所有控件都有一个默认构造函数,我可以创建所有带有我想要的参数的构造函数。但默认构造函数是否必须公开?我可以将其设为内部,私人,甚至保护吗?
答案 0 :(得分:6)
控件在WPF中不需要默认构造函数,除非你想从XAML实例化控件。
拥有这样的控件是完全合法的:
public partial class MyUserControl : UserControl
{
public MyUserControl(string someParameter) : this()
{
InitializeComponent();
}
}
如图所示,删除了默认构造函数,但您需要确保调用InitializeComponent();
。
如果从XAML实例化控件,则嵌入控件必须可以看到默认构造函数
因此,如果嵌入控件位于同一个程序集中,则可以是internal
,否则它必须为public
。
答案 1 :(得分:1)
使你的构造函数内部确保类型只会被当前程序集中的类型实例化,即使后来确定类型本身应该是public而不是internal。换句话说,您可以决定更改类型的可见性,而不会限制其实例化。
使构造函数公开具有相反的效果(显然),如果你希望它可以在可见的任何地方实例化它,那么这可能是明智的。