将 OpenFileDialog 定义为静态 class 是个好主意吗?
Is it good idea to define OpenFileDialog as a static class?
我有 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 是一个小 class。围绕非托管 Windows api 的微型 .NET 包装器 class。繁重的内容仅在您调用 ShowDialog() 时发生,并在您关闭对话框时消失。它的 Winforms 版本是一次性的(WPF 版本不是),但这只是因为它从 Component 继承了 Dispose()。它什么都不做。
唯一值得注意的内存使用是存储所选文件的字符串[],即文件名 属性 的后备存储。通常只有一个,您只会使用 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;
}
我有 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 是一个小 class。围绕非托管 Windows api 的微型 .NET 包装器 class。繁重的内容仅在您调用 ShowDialog() 时发生,并在您关闭对话框时消失。它的 Winforms 版本是一次性的(WPF 版本不是),但这只是因为它从 Component 继承了 Dispose()。它什么都不做。
唯一值得注意的内存使用是存储所选文件的字符串[],即文件名 属性 的后备存储。通常只有一个,您只会使用 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;
}