Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多个主要功能_C#_Java_Main - Fatal编程技术网

C# 多个主要功能

C# 多个主要功能,c#,java,main,C#,Java,Main,我在这方面有点生疏,所以请容忍我。我目前正在学习C#和Java,它们的一个相似之处是主函数需要封装在一个类中。比如说 public class HelloWorld { public static void main(String[] args) { // Some Code } } 现在我了解到,在运行程序时,main通常是“入口点”。因此,基本上,程序将开始执行主函数所在的任何位置。但我相信在这两种语言中,您可以在多个类中拥有多个主函数。因此,当我编译一个包

我在这方面有点生疏,所以请容忍我。我目前正在学习C#和Java,它们的一个相似之处是主函数需要封装在一个类中。比如说

public class HelloWorld {
    public static void main(String[] args) {
        // Some Code
    }
}

现在我了解到,在运行程序时,main通常是“入口点”。因此,基本上,程序将开始执行主函数所在的任何位置。但我相信在这两种语言中,您可以在多个类中拥有多个主函数。因此,当我编译一个包含多个主函数的项目时,“入口点”在哪里?编译器如何知道从哪里开始?

在Java中,计算机在实际执行程序时确定“入口点”,而不是在编译时。例如,从命令行

java MyClass
MyClass
中搜索
main()
。忽略所有其他
main()
函数


如果使用的是IDE,则可以设置要使用的
main()
函数所包含的类。

在.NET中,可以定义编译时要使用的main方法所包含的类

在Java中,如果要绑定到jar,可以在jar的清单中定义入口点

在C#中,可以使用多个
Main
方法

如果有多个
Main
方法,编译器不知道使用哪个入口点,因此它将向您显示一个错误

您需要在编译时使用: 您可以在Visual Studio开发环境中或通过csc编译器指定要用作编译器选项的方法。

在C#中,您可以使用
/main:
编译器选项指定入口点

考虑以下代码,其中包含两个
main()
函数:

namespace Application {
    class ClassOne {
        static void main () {
            // Code here
        }
    }

    class ClassTwo {
        static void main () {
            // Code here
        }
    }
}
要使用
ClassOne.main()
作为入口点,您需要在编译时指定以下内容:

csc /main:Application.ClassOne hello.cs

主类是一个特殊的类,原因只有一个:当运行Java虚拟机时,JVM调用该函数。它本质上类似于任何其他函数,事实上,您可以从另一个类调用一个类的主函数

当您使用多个类编译项目时,您会告诉JVM使用您想要使用的主类运行该类,如下所示:

java SomeClass
它将运行SomeClass的主方法,假设SomeClass已编译并且相应的编译文件位于类路径中。(这是您必须在特定操作系统中解决的问题,但我认为-cp选项指定类路径是相当常见的)。因此:

java -cp /home/MyName Someclass

将在Java中运行目录/home/MyName

中的某个类的主函数,正如其他人指出的那样,在运行
Java
命令时定义包含主函数的类


但是您也可以构建一个可执行的jar,它可以与
java-jar my.jar
一起运行。在这种情况下,您需要一个名为
manifest.MF
的清单文件,该文件位于jar的
META-INF
文件夹中。在此文件中,您可以使用以下语句指定包含主函数的类:
main class:YourClass

对于多个主函数,入口点可以通过以下方式声明:

在Visual Studio开发环境中设置此编译器选项

打开项目的属性页

单击应用程序属性页

修改启动对象属性


引用:

主方法是静态的,这意味着它属于类而不是对象。因此,对象中根本没有其他主方法。它不会有额外的main方法,因为main是静态的。所以每节课一次


如果您的项目中有多个主要方法,您将指定在启动应用程序时启动哪个方法实际上,在二进制文件中,例如windows中的PE格式和Linux或任何其他系统中的ELF格式,二进制文件的头将指定起始地址的位置,并且只能有一个

哪一个应该是入口点?这取决于链接器。正如@SetFreeByTruth所说,您可以使用命令行参数指定它。 许多链接器支持使用命令行参数指定入口点。例如,gnu的gld可以使用参数-e指定入口点


我不知道Java的行为,因为它是由Java虚拟机加载的。

在Visual Studio中,选择要作为入口点的项目,右键单击并设置为启动项目

每种语言的答案都不同。在Java中,它搜索
公共静态void main(String[]args)
@LuiggiMendoza Yes,这是正确的。为了简洁起见,我省略了main()的完整签名,因为OP已经证明他知道它是什么。或者对于方法签名
publicstaticvoidmain(String[])
publicstaticvoidmain(String…
,非常精确。其他主要方法并没有被“忽略”,它们只是不会自动执行。程序员可以编写显式调用类的主方法的代码!我的第一枚银牌!感谢所有投票支持这个答案的人!我不知道C#,但在Java中,这是不正确的。Java编译器不关心将使用哪个入口点;它将编译所有这些文件。另一方面,必须告诉运行时环境要执行哪个入口点。是的……但这个ans是指c#而不是java@Code-Guru:对于C#,答案是正确的,因为程序集在编译时有一个指定的入口点-在执行时不指定类名,只有程序集名称。@Jonsket原始答案没有指定语言。谢谢你的编辑,阿尼鲁达。我很惊讶这是投票最多的答案。至少对于Java来说,来自代码大师和@CosmicComputer的答案似乎与大多数人更相关。我想说,除了少数几个提供“可执行”jar的开发人员之外,很少有开发人员使用过manifest方法。@geogehawkins