将OpenFileDialog定义为静态类是否是个好主意?

时间:2015-11-18 06:24:49

标签: c# wpf openfiledialog

我有OpenFileDialog的应用程序,每次用户想要添加文件时我都不想要OpenFileDialog新实例(Winforms这可以在设计器内完成) 。 因此,将OpenFileDialog定义为Static classSingleton

是个好主意

修改

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;
    } 
}

1 个答案:

答案 0 :(得分:4)

OpenFileDialog是一个小类。围绕非托管Windows API的一个微小的.NET包装类。只有在调用ShowDialog()时才会发生重要事件,并在关闭对话框时消失。它的Winforms版本是一次性的(WPF版本不是),但仅仅因为它从Component继承了Dispose()。它没有做任何事情。

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

因此静态不是一个严重的问题。或者可取。不要忽视使用工厂方法的选择:

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;
}