C#入口点函数

C#入口点函数,c#,C#,是否有必要使用static void main()作为C#中的入口点函数,或者我们可以使用其他函数? 为什么main()是静态的?是的,对于C应用程序,main()必须是入口点 原因是,这正是语言设计者决定寻找的程序入口点。他们也可以使用完全不同的方法来找到入口点,例如使用元数据,或者为您实例化一个对象(这需要一个无参数的构造函数)。将其命名为void main()的另一个原因是,对于来自其他语言的用户来说,它很直观。是的,它必须是main。它是静态的,因为否则CLR将需要担心创建该类型的实例-

是否有必要使用
static void main()
作为C#中的入口点函数,或者我们可以使用其他函数? 为什么
main()
是静态的?

是的,对于C应用程序,
main()
必须是入口点


原因是,这正是语言设计者决定寻找的程序入口点。他们也可以使用完全不同的方法来找到入口点,例如使用元数据,或者为您实例化一个对象(这需要一个无参数的构造函数)。将其命名为
void main()
的另一个原因是,对于来自其他语言的用户来说,它很直观。

是的,它必须是
main
。它是静态的,因为否则CLR将需要担心创建该类型的实例-这意味着您可能必须拥有一个无参数构造函数,即使您不想要该类型的实例,等等。为什么要强制它成为实例方法?

所需的入口点实际上是:

static void Main(string[] args); // note capitalization and arguments
Main
必须是静态的原因是非静态对象必须在对其调用任何方法之前构造。既然
Main
是程序的入口点,那么谁来调用它的构造函数呢

(是的,您可以让CLR要求具有
Main
的类包含一个默认的无参数构造函数,并使CLR在全局启动期间调用该构造函数。但这是额外的工作,实际上更容易要求
Main
是静态的。)

static void Main()
是在C#中创建任何“可执行文件”(.EXE)的必要入口点。库(或.DLL)可以有其他入口点


该方法是静态的,因为这是访问该方法所必需的,而不需要对象的实例来寻址。为了从应用程序外部调用方法(起始点),需要一个静态方法。

< P> >代码>主< /代码>方法可能是你认为是应用程序的入口点,但在C语言中,我知道方法不能直接定义在命名空间中,这意味着它必须在一个类内。然后第一个真正执行的是包含
Main
方法的类的静态构造函数

using System;
namespace test
{
    class Program
    {
        static Program()
        {
            Console.WriteLine("static constructor");
        }

        public static void Main(string[] args)
        {
            Console.WriteLine("Main method");
        }
    }
}
首先输出
static构造函数
,然后输出
Main方法
static int Main(string[]args)
是静态的,因为它减少了运行时在开始执行程序入口点之前需要执行的潜在步骤数(运行类的静态构造函数,运行类的静态主构造函数…与运行类的静态构造函数相比,将类实例化到某个未定义的位置,运行实例的构造函数,然后运行实例的主方法)。您必须编写样板代码,将
存储到可以使用的实例变量中(并可能防止它超出引用范围,从而使它能够被垃圾收集),这也会增加引用计数,并需要更多的内存和定价,但不会获得太多收益


之所以命名为main,是因为C++在设计中强烈地联想到java,java使用main main,它本身来自C和C++的细微差别(情况是一件事).< /p>见@ ANISH,因为它必须是某种公共静态空格Queq()听起来不太好。为什么要在有门的情况下穿过墙?@Cos Main()是否是CLR特定的?@Anish。CLR指定必须有一个入口点,C语言规范将入口点标识为Main()。VB.Net使用Main()还有,但它不区分大小写。其他语言可能会指定不同的入口点,尽管我不知道有哪种语言使用的不是“main”或“main”。@juleagon:这是一个合理的选择,我也不知道为什么要坚持使用一个众所周知的名称,尽管这确实意味着写Hello World你不需要这样做了解属性…@julealgon:老实说,我觉得它相当实用。这样说:在我写C#的所有时间里,它真的没有给我带来任何痛苦。所需的入口点实际上…非常灵活。你可以从中返回int,也可以省略参数,如果我们这样做

Public void Main(string[]args)
然后通过从应用程序外部创建实例来调用它,这不管用吗?标记库的入口点被认为是一种好的做法吗?可能有几个公共类,如何向用户显示与dll名称对应的类的键?名称空间?名称?