为何不能是全局变量呢

为什么不能是全局变量呢?

#include "stdafx.h"
#include "Form1.h"

using namespace win;

//Form1^ gl_form; //放在这里不行
[STAThreadAttribute]

int main(array<System::String ^> ^args)
{
// 在创建任何控件之前启用 Windows XP 可视化效果
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false); 

// 创建主窗口并运行它
Form1^ gl_form = gcnew Form1(); //放在这里可以
Application::Run(gl_form);

return 0;
}

为什么会这样呢?如果我需要一个全局的应该怎么做呢?
另外有没有什么这方面书介绍一下呢?
------解决方案--------------------
public ref class Global abstract sealed {
public:
  static Form1^ gl_form = gcnew Form1();
};

------解决方案--------------------
首先你要清楚一个全局变量在编译为可执行文件后,它放在那里,而托管类型必须声明在托管堆下,它才能被.net框架管理,被垃圾回收,而全局变量只能放在全局变量内存下,这段内存不能被.net框架管理。还有太多太多的原因,这里就不说了,比如托管程序一切皆是对象,而全局变量有可能要打破这个要求。所以不能声明一个全局的托管类型变量