C# 在dialog'内调用.Show()或.ShowDialog是否是一种良好的做法;s构造函数

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

调用.Show()或.ShowDialog()方法作为WPF窗口构造函数的最后一行是一种好的做法吗?
唯一的原因是简化我的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方法分别完成它们的工作

绝对不能。构造函数应该只初始化窗口,而不是显示它。有不同的方法可以做到这一点。谢谢大家,很高兴知道这是一个糟糕的做法。这更有意义。我应用程序中的大多数窗口都很简单,我只是创建了它们的一个实例,显示并读取实例中的输入。通过这种方式也可以达到同样的效果,甚至更好。