Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.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类在没有初始化(或调用)的情况下工作_C#_.net - Fatal编程技术网

C# C类在没有初始化(或调用)的情况下工作

C# C类在没有初始化(或调用)的情况下工作,c#,.net,C#,.net,我刚开始在Xamarin上学习C,我对一些来自PHP背景的东西感到困惑 我使用了一个新的控制台项目模板,Program.cs中有一个类 这是《你好,世界》!如预期的那样将其发送到控制台。但是类MainClass从未初始化过。为什么要执行 编辑 更改我的问题:谁执行了构造函数?Main方法是静态的,它允许无实例调用。Main方法是静态的,它允许无实例调用。Main是程序的核心。运行程序时,操作系统会为您调用Main方法。因为Main是一个静态方法,所以它不需要创建MainClass的实例来执行此操

我刚开始在Xamarin上学习C,我对一些来自PHP背景的东西感到困惑

我使用了一个新的控制台项目模板,Program.cs中有一个类

这是《你好,世界》!如预期的那样将其发送到控制台。但是类MainClass从未初始化过。为什么要执行

编辑
更改我的问题:谁执行了构造函数?

Main方法是静态的,它允许无实例调用。

Main方法是静态的,它允许无实例调用。

Main是程序的核心。运行程序时,操作系统会为您调用Main方法。因为Main是一个静态方法,所以它不需要创建MainClass的实例来执行此操作

要成为有效的入口点,Main方法必须是静态的,返回类型为void或int,并且没有参数或只有一个string[]参数。见:

如果程序中有多个主方法是有效的入口点,请选择要使用的主方法。

Main是程序的主方法。运行程序时,操作系统会为您调用Main方法。因为Main是一个静态方法,所以它不需要创建MainClass的实例来执行此操作

要成为有效的入口点,Main方法必须是静态的,返回类型为void或int,并且没有参数或只有一个string[]参数。见:


如果程序中有多个主方法是有效的入口点,则可以选择使用哪一个。

主方法是应用程序的入口。它不需要初始化。除了一些类(如static)之外,您想在方法中使用的任何其他类都需要初始化。

主方法是应用程序的入口。它不需要初始化。任何其他类,你想在方法中使用,除了一些类,如静态。< /p> 简单地说,你需要一个入口点从OS到你的代码。所以公共静态无效主干[]的GS是作为入口点主线程,如果你看到java,C++,C++所有程序范式遵循几乎相同的约定。 就编译器而言,请参见下文 任何人都可以访问我的公共网站 Iistatic不需要创建实例,可以直接调用,并且只分配一次m内存 iii void-将空值返回给被调用的函数OS
IV主-唯一的函数名,按惯例,它是应用程序的入口点。

< P>简单地说,您需要从OS到您的代码的入口点。因此,公共静态空隙主链[] ARG被作为入口点主线程,如果您看到java、C++、C++所有程序范式遵循几乎相同的约定。 就编译器而言,请参见下文 任何人都可以访问我的公共网站 Iistatic不需要创建实例,可以直接调用,并且只分配一次m内存 iii void-将空值返回给被调用的函数OS iv Main-唯一的函数名,按照惯例,它是应用程序的入口点

但MainClass类从未初始化过。为什么要执行

它不需要是静态的,正如其他人指出的那样,Main是静态的

编译托管程序集时,它的头中有一节告诉.NET runtime定义的主方法在哪里,并将其设置为程序的入口点。您可以看到,打开托管.EXE时:

运行时负责调用主方法

如果您确实想了解运行时是如何初始化的,请查看

但MainClass类从未初始化过。为什么要执行

它不需要是静态的,正如其他人指出的那样,Main是静态的

编译托管程序集时,它的头中有一节告诉.NET runtime定义的主方法在哪里,并将其设置为程序的入口点。您可以看到,打开托管.EXE时:

运行时负责调用主方法


如果您确实想了解运行时是如何初始化的,请签出Main方法指定应用程序的入口点。此方法可以使用classname.methodname语法访问,因为它是静态方法。

Main方法指定应用程序的入口点。此方法可以使用classname.methodname语法访问,因为它是静态方法。

Main是C入口点。CLR负责执行程序。当编译为IL时,它被标记为.entrypoint,这是CLR用来标识要启动的方法的

下面是代码的中间语言的快照

.class private auto ansi beforefieldinit Test.MainClass
   extends [mscorlib]System.Object
{
 .method public hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // Code size       13 (0xd)
  .maxstack  8
  IL_0000:  nop
  IL_0001:  ldstr      "Hello World!"
  IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_000b:  nop
  IL_000c:  ret
} // end of method MainClass::Main

主要是C入口点。CLR负责执行程序。当编译为IL时,它被标记为.entrypoint,这是CLR用来标识要启动的方法的

下面是代码的中间语言的快照

.class private auto ansi beforefieldinit Test.MainClass
   extends [mscorlib]System.Object
{
 .method public hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // Code size       13 (0xd)
  .maxstack  8
  IL_0000:  nop
  IL_0001:  ldstr      "Hello World!"
  IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_000b:  nop
  IL_000c:  ret
} // end of method MainClass::Main

这是有道理的,但谁调用了它?请参阅中的相关调试器
STANTE,Main被描述为默认控制台项目的入口点。这有点像单击Word图标,可能会调用一个静态main方法,然后创建它需要的任何东西。因此,你可以说,这是控制台项目的性质,Program.cs中的静态类会自动调用?@Faloude-Program类是基于默认C模板的约定,而不是要求。您可以在任何喜欢的类中使用Main,前提是它遵循的是有意义的,但是谁调用了它?请参阅相关的调试器可能在您的实例中,Main被描述为默认控制台项目的入口点。这有点像单击Word图标,可能会调用一个静态main方法,然后创建它需要的任何东西。因此,你可以说,这是控制台项目的性质,Program.cs中的静态类会自动调用?@Faloude-Program类是基于默认C模板的约定,而不是要求。你可以在你喜欢的任何一门课上有一个Main,前提是它遵循这个答案,这正好回答了我的问题。Main是程序的入口点,你是说MainClass对吗?但如果我要在同一个文件中编写另一个类,也包含Main方法,那么哪个类Main方法将是程序的入口点?@Faloude:这取决于IDE中项目设置中的命令行上的编译器设置,参见@Faloude,如果您没有像Joren描述的那样消除歧义,那么代码就不会编译;它会特别告诉你,切入点是模棱两可的。这正好回答了我的问题。Main是程序的入口点,你是说MainClass对吗?但如果我要在同一个文件中编写另一个类,也包含Main方法,那么哪个类Main方法将是程序的入口点?@Faloude:这取决于IDE中项目设置中的命令行上的编译器设置,参见@Faloude,如果您没有像Joren描述的那样消除歧义,那么代码就不会编译;它会特别告诉你,入口点是模糊的。
.class private auto ansi beforefieldinit Test.MainClass
   extends [mscorlib]System.Object
{
 .method public hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // Code size       13 (0xd)
  .maxstack  8
  IL_0000:  nop
  IL_0001:  ldstr      "Hello World!"
  IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_000b:  nop
  IL_000c:  ret
} // end of method MainClass::Main