static void HookMiddleToTop_ThenBottomToMiddle_ThenCallBottom(BottomLayer bottom, MiddleLayer middle, TopLayer top)
             
        {
             middle.Event += top.TopLayerHandler;

             middle.HookUpEvent(bottom);
                     System.Console.Write("HookMiddleToTop_ThenBottomToMiddle_ThenCallBottom:");

                     bottom.callEvent();

                 
        }
              static void HookBottomToMiddle_ThenMiddleToTop_ThenCallBottom(BottomLayer bottom, MiddleLayer middle, TopLayer top)
             
        {
                     middle.HookUpEvent(bottom);

                 middle.Event += top.TopLayerHandler;

            try { bottom.callEvent(); }
                 catch(System.NullReferenceException)
            {
                System.Console.Write("HookBottomToMiddle_ThenMiddleToTop_ThenCallBottom: Event was null\n");
            }

                 
        }
          public void HookUpEvent(BottomLayer bl)
 {
     bl.Event += this.Event;
 }