12

快速提问,有没有办法随心所欲地调用你的主要方法?还是必须将其称为“Main()”?

4

10 回答 10

19

请注意,这是 C# 约定,而不是 .NET 运行时约定。您可以在 IL 中随意命名您的方法:

.module Mane.exe
.subsystem 3
.corflags 9

.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89)
  .ver 2:0:0:0
}

.assembly Mane
{
    .custom instance void [mscorlib]System.Runtime.InteropServices.ComVisibleAttribute::.ctor(bool) = ( 01 00 00 00 00 ) 
    .custom instance void [mscorlib]System.CLSCompliantAttribute::.ctor(bool) = ( 01 00 01 00 00 ) 
    .custom instance void [mscorlib]System.Reflection.AssemblyFileVersionAttribute::.ctor(string) = ( 01 00 07 31 2E 30 2E 30 2E 30 00 00 )
    .custom instance void [mscorlib]System.Resources.NeutralResourcesLanguageAttribute::.ctor(string) = ( 01 00 05 65 6E 2D 55 53 00 00 )

    .permissionset reqmin
               = {[mscorlib]System.Security.Permissions.SecurityPermissionAttribute = {property bool 'Execution' = bool(true)}}
    .hash algorithm 0x00008004
    .ver 1:0:0:0
}

.namespace Mane
{
    .class private abstract auto ansi sealed beforefieldinit Program extends [mscorlib]System.Object
    {
        .method private hidebysig static void Mane() cil managed
        {
            .entrypoint
            .maxstack 1
            ldstr "Hello, World!"
            call void [mscorlib]System.Console::WriteLine(class System.String)
            ret
        }
    }
}
于 2010-04-09T19:44:49.700 回答
5

您可以将 main 方法称为其他方法,但除非它被调用,否则它不会作为应用程序中的第一个方法被调用Main。还有一些其他要求和注意事项。来自MSDN

  • Main 方法是程序的入口点,程序控制在这里开始和结束。
  • 它在类或结构中声明。它必须是静态的,并且不应该是公开的。
  • 它可以具有 void 或 int 返回类型。
  • Main 方法可以带或不带参数声明。
  • 参数可以作为零索引的命令行参数读取。
  • 与 C 和 C++ 不同,程序的名称不被视为第一个命令行参数。
于 2010-04-09T19:40:24.767 回答
3

我不相信有办法在 C# 方面做到这一点,但如果你愿意编辑你的 IL,那么很容易进入并将 .entrypoint 添加到 IL 中的函数中。查看维基百科上的 CLI 条目。

于 2010-04-09T19:45:40.733 回答
1

不,它必须被称为 Main。请参阅 Main() 和命令行参数(C# 编程指南)

于 2010-04-09T19:38:40.647 回答
1

它必须被称为 Main()。

于 2010-04-09T19:38:47.630 回答
1

它需要被调用Main(),因为它是应用程序的入口点。

名称和限制由框架定义。这是 MSDN 页面供参考:

主要 (C#)

于 2010-04-09T19:38:48.633 回答
1

它必须被称为主要。

如果你真的想要,你可以创建自己的方法,然后将它作为 Main 中唯一的一行代码调用。

public static void Main(String[] args)
{
    Mane(args);
}
于 2010-04-09T19:39:25.457 回答
1

不...主要是标准的。您可以做的是从项目属性的“启动对象”设置中更改承载 Main 方法的类

但实际上,你为什么要这样做?每个人都知道它是主要的......所以你会混淆其他可能会查看你的代码的开发人员

于 2010-04-09T19:39:27.540 回答
1

来自“ Main() 和其他方法(C# vs Java) ”:

每个 C# 应用程序都必须包含一个 Main 方法,指定程序执行的开始位置。

于 2010-04-09T19:39:39.227 回答
0

从 C# 9.0 开始,不再需要Main方法:

在 C# 9.0 中,您可以选择在顶层编写主程序:

using System;

Console.WriteLine("Hello World!");

允许任何陈述。该程序必须出现在using文件中的任何类型或命名空间声明之后和之前,并且您只能在一个文件中执行此操作,就像您今天只能拥有一种Main方法一样。

这将节省一些样板代码,并且对于快速控制台程序来测试某些东西很有用,但对于更严重的事情,我仍然建议使用Main; 如果您正在寻找程序的入口点,那么Main(在整个解决方案中搜索很容易,但要搜索缺少命名空间/类/方法的情况就不那么容易了。

于 2020-07-04T13:38:55.720 回答