《刻意练习之C#》-0002- Main方法

2021-03-03 03:25

阅读:491

标签:contain   console   选项   star   多个   class   bsp   errors   string   

main方法简介

  • Main方法是C#应用的入口函数,是程序启动时第一个被调用执行的方法;

  • Main方法需要声明在一个class或struct里面;

  • Main方法必须是static方法;

  • Main方法不必是public的

main方法的定义

  • main方法可以是以下列表中的一个:

public static void Main() { }
public static int Main() { }
public static void Main(string[] args) { }
public static int Main(string[] args) { }
public static async Task Main() { }
public static async Task Main() { }
public static async Task Main(string[] args) { }
public static async Task Main(string[] args) { }
  • Task或Task返回值类型,是在C# 7.1及之后的版本支持;

  • 如果返回值是Task或Task类型,需要在前面加 async关键字;

  • 注:public关键字不是必须的,可以省略。

多个Main方法

  • 当应用程序里面包含多个Main方法的时候,需要在编译的时候使用 /main选项指定入口是哪一个Main方法;

  • 示例:新加一个Hello类,里面也定义一个Main方法:

using System;

namespace _0002main_method
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine($"this Main method in Program class");
        }
    }

    class Hello
    {
        static void Main(string[] args)
        {
            Console.WriteLine($"this Main method in Hello class");
        }
    }
}

当运行程序(dotnet run)时报错:

Hello.cs(7,21): error CS0017: Program has more than one entry point defined. Compile with /main to specify the type that contains the entry point. The build failed. Fix the build errors and run again.

 

多Main方法-解决办法  

使用csc编译

csc Program.cs /main:_0002main_method.Hello

使用dotnet build

dotnet build /p:StartupObject=_0002main_method.Hello

补充说明

  • 不能在dotnet 命令使用/main的原因是:/main参数是编译器(csc)的参数,不是dotnet的;

  • dotnet build本质会去调用MSBuild,MSBuild进而调用csc;所以需要用MSBuild的参数/p指定对应的类,然后其会再转给csc。

《刻意练习之C#》-0002- Main方法

标签:contain   console   选项   star   多个   class   bsp   errors   string   

原文地址:https://www.cnblogs.com/codesee/p/13021521.html

上一篇:API HOOK

下一篇:C# 数据结构--单链表


评论


亲,登录后才可以留言!