在C#中,什么';Windows中窗体的首选定义是什么?

在C#中,什么';Windows中窗体的首选定义是什么?,c#,.net,C#,.net,在具有formMain和一些其他表单(formAccount,formPerson等)的应用程序中 (1) 将单独的表单定义为单独的类,并在需要时创建(实例化)它们: class FormAccount : Form { public FormAccount(...) { ... } } class FormMain : Form { public FormMain(...) { ... } } class Program {

在具有
formMain
和一些其他表单(
formAccount
formPerson
等)的应用程序中

(1) 将单独的表单定义为单独的类,并在需要时创建(实例化)它们:

class FormAccount : Form {
    public FormAccount(...) {
        ...
    }
}

class FormMain : Form {
    public FormMain(...) {
        ...
    }
}

class Program {
    FormMain formMain = new FormMain();

    static void SomeFoo() {
        ...
        FormAccount formAccount = new FormAccount();
        ...
    }

    static int Main(string[] argv) {
        ...
        Application.Run(formMain);
        return (0);
    }    
}

(2) 在一个类中定义每个表单,并在需要时使用
formXxxx.Show()

class Program {
    Form formMain = new Form();
    Form formAccount = new Form();

    static int Main(string[] argv) {
        ...
        Application.Run(formMain);
        return (0);
    }    
}
第一种似乎对内存友好,因为不时关闭的窗体将释放堆内存。然而,有些表单是定期打开和关闭的,在我看来,这些表单最好能留在记忆中


定义这些形式的偏好是什么?

从理论上讲,没有关于形式的指南。但是,如果您使用像VisualStudio这样的IDE,它们确实存在。VisualStudio设计器要求要编辑的表单必须是文件的第一个类,并且只能对第一个类进行可视化编辑

学习Winforms编程有两种基本方法:试用和出错或阅读书籍/教程。由于您希望以试用方式进行此操作,因此首先需要使用方法2。很多错误,您将了解ObjectDisposedException的含义,这一点非常重要。@HansPassant:我想我知道您的意思,但对于后一种情况,除
formMain
之外的表单将不会被关闭/终止(关闭按钮将被禁用)。单击
formMain
上的一个按钮将
Visible
属性切换为
true
,用于
formAccount
上的另一个按钮将
Visible
属性切换为
false
。您认为在这种情况下我仍然会得到ObjectDisposedException吗?VS设计器负责为每个表单定义一个类,此外,它还分离了关注点(请参见SOLID主体的“S”)。我会这样做,因为你有工具支持,你可以把特定于表单的代码放在它的类中,与其他表单代码分开。表单只是类。对于任何一次性资源,请遵循相同的做法。