我有OpenFileDialog的应用程序,并且我不想每次用户想要添加文件时都使用OpenFileDialog新实例(使用Winforms可以在设计器中完成)。
所以将OpenFileDialog定义为Static class或也许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版本),但这仅是因为它从Component继承了Dispose()。它什么也没做。

唯一值得注意的内存使用情况是string [],用于存储所选文件,即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;
}

关于c# - 将OpenFileDialog定义为静态类是个好主意吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33773139/

10-12 01:38