zoukankan      html  css  js  c++  java
  • 关于IssueVision命令模式中对象生命周期的困惑

    在IssueVision的命令模式中有如下代码(\Patterns\Commander.cs)
      public static void Connect(ToolBarButton button, Command command)
      {
       ToolBarButtonCommander unused = new ToolBarButtonCommander(button, command);
      }
    按理说unused是内部变量,生命周期应该在Connect方法的作用范围内,应该马上被销毁,或者说垃圾回收器可以随时回收这个对象,  但是这个对象的生命周期跟主窗体一样.

    于是根据以上代码就设想,当一个类内部变量被一个外部变量引用时,那么在外部变量被销毁前这个类是不会被销毁的,以下就是一段测试代码来做这个试验(注意结果是否定的)
    public class TestClass2
        
    {
            
    private string m_Name;
            
    private string[] m_Arr = new string[10000];
            Button m_but
    =null;
            
    public Command m_Command;
            
    public TestClass2( string name,Object obj)
            
    {


                m_Name 
    = name;
                
    for (int i = 0; i < 10000; i++)
                
    {
                    m_Arr[i] 
    = "adssssssssssssssssssssssssssssssssssssssssssssssssssssss";
                }

                
    if (obj != null)
                
    {
                    obj 
    = m_Arr;
                }

            }

            
    private void HandleEvent(object sender, EventArgs e)
            
    {
                m_Command.Execute();
            }

            
    ~TestClass2()
            
    {
                MessageBox.Show(m_Name 
    + ":我被销毁");
            }

            
    public static void Connected(Button but, string name,Object obj)
            
    {
                TestClass2 tstcls 
    = new TestClass2(name,obj);

            }

        }


    在form_load中有下面代码
    obj 是窗体级的变量(private Object obj=null;)
                 for (int i = 1; i < 20; i++)
                {

                    TestClass2.Connected( "1X" + i,null);
                    TestClass2.Connected("2X" + i,obj);
                    Application.DoEvents();
                }
    结果是运行后会弹出2X,1X这样的对话框表示,这个类,被销毁了!!!

    但是IssueVision里的Commander确没问题,!!

  • 相关阅读:
    896. Monotonic Array单调数组
    865. Smallest Subtree with all the Deepest Nodes 有最深节点的最小子树
    489. Robot Room Cleaner扫地机器人
    JavaFX
    《Python CookBook2》 第一章 文本
    《Python CookBook2》 第一章 文本
    《Python CookBook2》 第一章 文本
    《Python CookBook2》 第一章 文本
    《Python CookBook2》 第一章 文本
    《Python CookBook2》 第一章 文本
  • 原文地址:https://www.cnblogs.com/wdfrog/p/845799.html
Copyright © 2011-2022 走看看