C# 在dialog'内调用.Show()或.ShowDialog是否是一种良好的做法;s构造函数
调用.Show()或.ShowDialog()方法作为WPF窗口构造函数的最后一行是一种好的做法吗?C# 在dialog'内调用.Show()或.ShowDialog是否是一种良好的做法;s构造函数,c#,.net,wpf,constructor,dialog,C#,.net,Wpf,Constructor,Dialog,调用.Show()或.ShowDialog()方法作为WPF窗口构造函数的最后一行是一种好的做法吗? 唯一的原因是简化我的window类的使用——通过创建它的实例,我已经在显示它了。我认为这是一个糟糕的做法。如果您想创建实例而不显示它们呢 相反,您可以提供一个工厂方法来实现这一点: public static void ShowMyDialog(string text) { // initialize an instance of this dialog // ... and
唯一的原因是简化我的window类的使用——通过创建它的实例,我已经在显示它了。我认为这是一个糟糕的做法。如果您想创建实例而不显示它们呢 相反,您可以提供一个工厂方法来实现这一点:
public static void ShowMyDialog(string text)
{
// initialize an instance of this dialog
// ... and then show
instance.ShowDialog();
}
在继承的情况下,您建议的方法发生了惊人的变化:
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
Title = "W 1";
ShowDialog();
}
}
public partial class Window2 : Window1
{
public Window2()
{
InitializeComponent();
Title = "W 2";
}
}
尝试创建var w=new Window2()代码>将阻止Window2 ctor的执行,直到带有“W 1”标题的模式窗口关闭<代码>w.ShowDialog()
将在此之后引发异常
在正常条件下,用户可能希望在显示窗口之前设置窗口的某些属性,例如设置DataContext
所以,不要打破单一责任原则,让构造函数和ShowDialog方法分别完成它们的工作绝对不能。构造函数应该只初始化窗口,而不是显示它。有不同的方法可以做到这一点。谢谢大家,很高兴知道这是一个糟糕的做法。这更有意义。我应用程序中的大多数窗口都很简单,我只是创建了它们的一个实例,显示并读取实例中的输入。通过这种方式也可以达到同样的效果,甚至更好。