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

本文关键字:好主意 静态类 OpenFileDialog 定义 | 更新日期: 2023-09-27 18:22:23

我有一个带有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;
    } 
}

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

OpenFileDialog是一个小类。一个围绕非托管Windows api的小型.NET包装类。沉重的东西只在调用ShowDialog()时发生,在关闭对话框时消失。它的Winforms版本是可丢弃的(WPF版本不是),但这只是因为它从Component继承了Dispose()。它没有任何作用。

唯一值得注意的内存使用情况是存储选定文件的字符串[],它是FileNames属性的后备存储。通常只有一个,而您只能使用FileName,从技术上讲,它可以是数千个。它超过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;
}