基于Microsoft Learn的C#学习(基础知识-程序结构)

本文档详细介绍了C#程序的基础结构,包括命名空间、类和Main方法的作用。Main方法作为C#应用程序的入口点,其在C#9之前的版本中是静态的,而在C#9及以后版本中,可以使用顶级语句作为入口点。Main方法的返回类型可以是void、int、Task或Task<int>,并且可以接受命令行参数。返回int或Task<int>允许程序传递状态信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考文档:https://learn.microsoft.com/zh-cn/dotnet/csharp/fundamentals/program-structure/https://learn.microsoft.com/zh-cn/dotnet/csharp/fundamentals/program-structure/

概述-C#程序的通用结构

C#程序由一个或多个文件组成。

每个文件均包含零个或多个命名空间。

一个命名空间包含类、结构、接口、枚举、委托等类型或其他命名空间。

以下示例是包含所有这些元素的C#程序主干。

// A skeleton of a C# program
using System;

// Your program starts here:
Console.WriteLine("Hello world!");

namespace YourNamespace
{
    class YourClass
    {
    }

    struct YourStruct
    {
    }

    interface IYourInterface
    {
    }

    delegate int YourDelegate();

    enum YourEnum
    {
    }

    namespace YourNestedNamespace
    {
        struct YourStruct
        {
        }
    }
}

前面的示例使用顶级语句作为程序的入口点。

C#9中添加了此功能。

在C#9之前,入口点是名为Main的静态方法,如以下示例所示:

// A skeleton of a C# program
using System;
namespace YourNamespace
{
    class YourClass
    {
    }

    struct YourStruct
    {
    }

    interface IYourInterface
    {
    }

    delegate int YourDelegate();

    enum YourEnum
    {
    }

    namespace YourNestedNamespace
    {
        struct YourStruct
        {
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            //Your program starts here...
            Console.WriteLine("Hello world!");
        }
    }
}

Main方法-Main()和命令行参数

Main方法是C#应用程序的入口点。

(库和服务不要求使用Main方法作为入口点)。

Main方法时应用程序启动后调用的第一个方法。

C#程序中只能有一个入口点。

如果多个类包含Main方法,必须使用StartupObject编译器选项来编译程序,以指定将哪个Main方法用作入口点。

有关详细信息,请参阅StartupObject(C#编译器选项)。

class TestClass
{
    static void Main(string[] args)
    {
        // Display the number of command line arguments.
        Console.WriteLine(args.Length);
    }
}

自 C#9 起,可以省略Main方法,并像在Main方法中一样编写C#语句,如下面的示例所示:

using System.Text;

StringBuilder builder = new();
builder.AppendLine("Hello");
builder.AppendLine("World!");

Console.WriteLine(builder.ToString());

若要了解如何使用隐式入口点方法编写应用程序代码,请参阅顶级语句。

概述

        Main方法是可执行程序的入口点,也是程序控制开始和结束的位置。

        Main在类或结构中声明。Main必须是static,它不需要是public。

        (在前面的示例中,它获得的是private成员的默认访问权限)。

        封闭类或结构不一定要是静态的。

        Main的返回类型可以是void、int、Task或Task<int>。

        

        当且仅当Main返回Task或Task<int>时,Main的声明可包括async修饰符。

        这明确排除了async void Main方法。

        使用或不使用包含命令行自变量的string[ ]参数声明Main方法都行。

        使用 Visual Studio 创建 Windows应用程序时,可以手动添加此形参,也可以使用         GetCommandLineArgs() 方法来获取命令行实参。

        参数被读取为从零开始编制索引的命令行自变量。

        与C和C++不同,程序的名称不被视为 args  数组中的第一个命令行实参,但它是

        GetCommandLineArgs()方法中的第一个元素。

以下列表显示了有效的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<int> Main() { }
public static async Task Main(string[] args) { }
public static async Task<int> Main(string[] args) { }

 上述示例均使用public访问器修饰符。这是典型操作,但不是必需的。

添加async、Task和Task<int>返回类型可简化控制台应用程序需要启动时的程序代码,以及Main中的await异步操作。

Main()返回值

可以通过以下方式之一定义方法,以从Main方法返回 int:

Main 方法代码Main 签名
不使用 args 或 awaitstatic int Main()
使用 args,不使用 awaitstatic int Main(string[] args)
不使用 args,使用 awaitstatic async Task<int> Main()
使用 args 和 awaitstatic async Task<int> Main(string[] args)

如果不使用Main的返回值,则返回void或Task可使代码变得略微简单。

Main 方法代码Main 签名
不使用 args 或 awaitstatic void Main()
使用 args,不使用 awaitstatic void Main(string[] args)
不使用 args,使用 awaitstatic async Task Main()
使用 args 和 awaitstatic async Task Main(string[] args)

但是,返回int或Task<int>可使程序将状态信息传递给调用可执行文件的其他程序或脚本。

下面的示例演示了如何访问进程的退出代码。

此示例使用.NET Core命令行工具。如果不熟悉.NET Core命令行工具,可通过本本入门文章进行了解。

通过运行dotnet new console 创建新的应用程序。修改Program.cs中的Main方法,如下所示:

// Save this program as MainReturnValTest.cs.
class MainReturnValTest
{
    static int Main()
    {
        //...
        return 0;
    }
}

在Windows中执行程序时,从Main函数返回的任何值都存储在环境变量中。

可使用批处理文件中的 ERRORLEVEL 或 PowerShell 中的 $LastExitCode来检索此环境变量。

可使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值