C# 将OpenFileDialog定义为静态类是个好主意吗?

C# 将OpenFileDialog定义为静态类是个好主意吗?,c#,wpf,openfiledialog,C#,Wpf,Openfiledialog,我有一个带有OpenFileDialog的应用程序,我不希望每次用户想要添加文件时都有OpenFileDialog新实例(使用Winforms这可以在设计器中完成)。 那么,将OpenFileDialog定义为Static类或者Singleton好吗 编辑 public static class OpenFileDialogCreation { public static OpenFileDialog openFileDialog; public static void Cre

我有一个带有
OpenFileDialog
的应用程序,我不希望每次用户想要添加文件时都有
OpenFileDialog
新实例(使用
Winforms
这可以在设计器中完成)。 那么,将
OpenFileDialog
定义为
Static类
或者
Singleton
好吗

编辑

public static class OpenFileDialogCreation
{
    public static OpenFileDialog openFileDialog;

    public static void CreateDialog()
    {
        openFileDialog = new OpenFileDialog();
        openFileDialog.Title = "Select File(s)";
        openFileDialog.Filter = "*.doc|*.doc";         
        openFileDialog.Multiselect = true;
    } 
}

OpenFileDialog是一个小类。围绕非托管Windows api的一个小小的.NET包装类。只有在调用ShowDialog()时,重的内容才会发生,而在关闭对话框时,重的内容就会消失。它的Winforms版本是一次性的(WPF版本不是),但这只是因为它从组件继承了Dispose()。它没有任何作用

唯一值得注意的内存使用是存储选定文件的字符串[],即FileNames属性的后备存储。通常只有一个文件名,而您只使用文件名,从技术上讲,它可以是数千个。超过1兆字节是非常罕见的

所以静电不是一个严重的问题。或者说是可取的。不要忽略使用工厂方法的选项:

public static OpenFileDialog CreateDialog(string initialDir = null) {
    var dlg = new OpenFileDialog();
    dlg.Title = "Select Word documents";
    dlg.Filter = "Word documents (*.doc,*.docx)|*.doc;*.docx";
    dlg.DefaultExt = ".doc";
    dlg.Multiselect = true;
    if (initialDir != null) dlg.InitialDirectory = initialDir;
    return dlg;
}

OpenFileDialog是一个小类。围绕非托管Windows api的一个小小的.NET包装类。只有在调用ShowDialog()时,重的内容才会发生,而在关闭对话框时,重的内容就会消失。它的Winforms版本是一次性的(WPF版本不是),但这只是因为它从组件继承了Dispose()。它没有任何作用

唯一值得注意的内存使用是存储选定文件的字符串[],即FileNames属性的后备存储。通常只有一个文件名,而您只使用文件名,从技术上讲,它可以是数千个。超过1兆字节是非常罕见的

所以静电不是一个严重的问题。或者说是可取的。不要忽略使用工厂方法的选项:

public static OpenFileDialog CreateDialog(string initialDir = null) {
    var dlg = new OpenFileDialog();
    dlg.Title = "Select Word documents";
    dlg.Filter = "Word documents (*.doc,*.docx)|*.doc;*.docx";
    dlg.DefaultExt = ".doc";
    dlg.Multiselect = true;
    if (initialDir != null) dlg.InitialDirectory = initialDir;
    return dlg;
}

你说使用工厂方法是什么意思?公共静态OpenFileDialog CreateDialog(){…}请看我的更新,这样做合适吗?这应该在类内还是简单方法就足够了?当然,方法总是需要在类内。把它放在你喜欢的任何地方,一个名为WordUtils的公共静态类是一个明智的选择。你说使用工厂方法是什么意思?公共静态OpenFileDialog CreateDialog(){…}请查看我的更新,这是合适的方法吗?这应该在类内,或者简单方法就足够了?当然,方法总是需要在类内。把它放在任何你喜欢的地方,一个名为WordUtils的公共静态类是一个明智的选择。