winform程序不一定要用Main() 函数做入口

学习Winform这么久了,还没想过一个程序是如何被载入的,甚至连里面变量如何初始化,都没有仔细的考虑过,今天抽了点时间验证了一下自己突然然到的东西,首先说一点基础的东西,一个类在被载入时(首次用一个类时),会先被始化静态成员变量,然后是静态构造函数,然后才是自己的操作.既然是这样,那可以想一下,在C#中Main函数不也是在一个类中的吗,那样也就会先初始化静态成员的,所以只要一点的代码就可以实现其它的函数作为入口:

下面分别用C#写一下,

在Program.cs文件中测试代码如下

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace WindowsApplication2
{
    static class Program
    {
        ///


        /// 应用程序的主入口点。
        ///

        [STAThread]
        static void Main()
        {
               MessageBox.Show("Main函数终于执行了");

        }

        //先初始化静态成员,就可以调用其它函数了,然后才是Main函数

        static int i = Main2();
        static int Main2()
        {

            Application.Run(new Form());
            return 1;
        }
    }
}

当然这样做也没什么好处,但是知道也没什么坏处,对程序运行顺序多一点点的了解而已

既然C#是这样,那C++也行了,尽管C++入口不在一个类中

下面写C++的

[STAThreadAttribute]
int main(array ^args)
{
 System::Windows::Forms::MessageBox::Show("这里是Main,但是不是从这里开始"); 
 return 0;
}

static int main2()
{
 System::Windows::Forms::MessageBox::Show("这里不是Main,是Main2,但是从这里开始"); 
 return 0;
}
static int i=main2();

他们之间有一点是不一样的

C#里的Main一定要在一个类当中,C++的刚好相反,这一点我就不知道了.

可以看下资料:

系统并不是直接调用Main函数,而是去调用C/C++运行期启动函数,此函数会初始化C/C++运行库,因此,在程序中可以调用malloc,free之类函数,它也会保证在用户的代码之前把所有的全局或静态对像的创建.

当然如果不初始化,直接进入Main函数,如果Main中用到了静态成员,那不就错了,所以这样才能解决

当然也可以加点代码证明一下winform进程是在什么时候产生的.

 

你可能感兴趣的:(.net,winform)