C#自己命名Main()方法的方法?
快速提问,有没有一种方法可以随意调用你的主要方法?或者它必须被称为“Main()”?不,它必须被称为Main 它必须被称为Main()。它需要被称为C#自己命名Main()方法的方法?,c#,main,C#,Main,快速提问,有没有一种方法可以随意调用你的主要方法?或者它必须被称为“Main()”?不,它必须被称为Main 它必须被称为Main()。它需要被称为Main(),因为它是应用程序的入口点 名称和限制由框架定义。以下是MSDN页面供参考: 它必须被称为Main 如果您真的愿意,您可以创建自己的方法,并将其作为Main中唯一的一行代码来调用 public static void Main(String[] args) { Mane(args); } 没有。。。主要是标准。但您可以做的是从项
Main()
,因为它是应用程序的入口点
名称和限制由框架定义。以下是MSDN页面供参考:
它必须被称为Main 如果您真的愿意,您可以创建自己的方法,并将其作为Main中唯一的一行代码来调用
public static void Main(String[] args)
{
Mane(args);
}
没有。。。主要是标准。但您可以做的是从项目属性的“启动对象”设置中更改承载主方法的类 但真的,你为什么要这么做?每个人都知道这是主要的。。。因此,您可能会让其他可能从“”查看您的代码的开发人员感到困惑: 每个C#应用程序都必须包含一个指定程序执行开始位置的主方法
您可以将main方法调用为其他方法,但它不会作为应用程序中的第一个方法调用,除非它被调用为
main
。还有一些其他的要求和注意事项。发件人:
- Main方法是程序的入口点,程序控件从这里开始和结束
- 它在类或结构中声明。它必须是静态的,不应该是公共的
- 它可以具有void或int返回类型
- Main方法可以声明为带参数或不带参数
- 参数可以读取为零索引命令行参数
- 不像C和C++,程序的名称不被当作第一个命令行参数。
.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
}
}
}
我不相信有一种方法可以做到这一点,但如果你愿意编辑你的IL,就很容易进入并添加。入口指向IL中的函数。查看wikipedia上的CLI条目。从C#9.0开始,一个
Main
方法是:
在C#9.0中,您可以选择在顶层编写主程序:
using System;
Console.WriteLine("Hello World!");
任何声明都是允许的。程序必须在使用s的之后和文件中的任何类型或命名空间声明之前执行,并且您只能在一个文件中执行此操作,就像您现在只能有一个Main
方法一样
这将节省一些样板代码,对于快速控制台程序测试某些内容非常有用,但对于更严重的问题,我仍然建议使用Main
;如果您正在寻找程序的入口点,在整个解决方案中搜索Main(
)很容易,但搜索缺少名称空间/类/方法就不那么容易了。我从来没有想到过这一点,因为Main()中只能有一行我对答案很感兴趣。除了好奇之外,还有其他原因吗?有人引用了这样一句话:“如果调试的难度是编写新代码的两倍,那么根据定义,你还不够聪明,无法调试出“最聪明”的代码。”打乱约定完全属于这一类。显然这是一个C#约定,而不是.NET框架约定。谢谢你回答得很好。真的很有趣,非常欢迎你,谢谢你的赞誉。事后想想,我想知道像PostSharp这样的工具是否可以注入IL(.entrypoint)的适当部分进入一个用特定属性修饰的方法,从而消除了需要命名为Main()的入口点的C#“限制”。