Form表示一个窗体 但是否有必要把设计成单例的呢我个人觉得从继承和扩展的角度上来讲不提倡用单例模式开发Form首先我把设计成单例的原因给大家说说比如最普通的实现 点击菜单MenuItem1实现打开窗体Form1,打开窗体后再次点击MenuItem1通过单例方法再次得到Form的实例这样没问题不过如果这个Form可以实现多个功能或者起到多个作用(外观或者实现有变化) 在对应多个菜单项的情况下可能需要在类内实例化多个单例 这种做法是否科学有没有更好的办法呢?或者沿用这个框架 是否可以用继续来管理实例化的单例对象呢?望高手指点!不胜感激!

解决方案 »

  1.   

    窗口置前的话
    参考
    http://www.dotnet247.com/247reference/msgs/22/112106.aspx
      

  2.   

    单不单例的概念我不知道,不过可以这样,在你需要只打开一个窗体的地方,比如你说的menuitem1上单击的时候都只打开同一个窗体,而在其它地方(比如某个按钮单击时)再new一个实例出来.这样不是更好?
    在窗体内定义一个静态属性:
     static frmDuty _frmD;        public static frmDuty frmDefInstance
            {
                get
                {
                    if (_frmD == null || _frmD.IsDisposed)
                    {
                        _frmD = new frmDuty();
                    }
                    return _frmD;
                }
            }
    在需要打开同一个窗体的地方这么调用:frmDuty.frmDefInstance.Show();frmDuty.frmDefInstance.BringToFront();
    而在其它地方,这么调用:frmDuty frmD=new frmDuty();frmD.Show();
      

  3.   

    太对了,楼主究竟要实现一个什么东西呢不知道要干什么,在这里讨论单例是没有意义了如果你想做一个类似资源管理器一样的界面,或者IE一样的界面,建议学习一下SCSF,或许那东西能给你解惑
      

  4.   

    整合了楼上几位的意见 可能自己说的不太明白其实想想 现在感觉上我的说法有些问题 因为并不是纯粹的单例模式举个例子 之前系统的设计模式是这样的 一个可以执行多种操作的Form 比如修改,新建,查看等等 这些form在视觉上功能上可能有所不同 但是用的是同一个具体的Form类 所以做法是要在类里面设计出 三个静态实例来 比如 updateForm,newForm,viewForm 用他们来记住用户是否已经打开这些form感觉更像是用form自己的静态域维护自己的实例 但我感觉这种思路很奇怪 而且维护扩展起来就很不方便了 所以才产生了此疑问至于需求 就是一个普通的应用程序系统框架 无非是重复的增删改查 没有很多复杂业务逻辑不知这样是否解释清楚了我的用意