C# 控制台应用模板可生成顶级语句

C# 控制台应用模板可生成顶级语句

  • 项目
  • 2024/01/08
  • 10 个参与者

反馈

本文内容

  1. 使用新的程序样式
  2. 隐式 using 指令
  3. 全局 using 指令
  4. 使用旧程序样式

从 .NET 6 开始,新 C# 控制台应用的项目模板在 Program.cs 文件中生成以下代码:

C#复制

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

新的输出使用最新的 C# 功能,这些功能简化了需要为程序编写的代码。 对于 .NET 5 及更早版本,控制台应用模板生成以下代码:

C#复制

using System;

namespace MyApp // Note: actual namespace depends on the project name.
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

这两种形式代表同一个程序。 两者都适用于 C# 10.0。 使用较新版本时,只需编写 Main 方法的主体。 编译器会生成一个具有入口点方法的 Program 类,并将你的所有顶级语句置于该方法中。 生成的方法的名称不是 Main,它是你的代码无法直接引用的实现细节。 不需要包含其他程序元素,编译器会为你生成这些元素。 你可以在 C# 指南的基础部分中,在关于顶级语句的文章中详细了解使用顶级语句时编译器生成的代码。

对于尚未更新为使用 .NET 6+ 模板的教程,可以使用以下两个选项:

  • 使用新的程序样式,添加功能时添加新的顶级语句。
  • 使用 Program 类和 Main 方法将新程序样式转换为旧样式。

如果要使用旧模板,请参阅本文后面的使用旧程序样式

使用新的程序样式

使新程序更简单的功能是顶级语句、全局 using 指令和隐式 using 指令 。

术语顶级语句是指编译器会为主程序生成类和方法元素。 编译器生成的类和入口点方法在全局命名空间中声明。 你可以查看新应用程序的代码,并假设它包含早期模板所生成的 Main 方法内的语句,但位于全局命名空间中。

你可以向程序添加更多语句,就像用传统方式将更多语句添加到 Main 方法一样。 可以访问 args(命令行参数)使用 await 并设置退出代码。 甚至可以添加函数。 它们被创建为嵌套在生成的入口点方法中的本地函数。 本地函数不能包括任何访问修饰符(例如 public 或 protected)。

顶级语句和隐式 using 指令都简化了构成应用程序的代码。 若要按照现有教程操作,请将所有新语句添加到模板生成的 Program.cs 文件中。 假设在本教程的说明中,你编写的语句位于 Main 方法中的左大括号和右大括号之间。

如果你更喜欢使用较旧的格式,则可以复制本文第二个示例中的代码,并像以前一样继续学习本教程。

有关顶级语句的详细信息,请参阅有关顶级语句的教程。

隐式 using 指令

术语“隐式 using 指令”是指编译器会根据项目类型自动添加一组 using 指令。 对于控制台应用程序,以下指令隐式包含在应用程序中:

  • using System;
  • using System.IO;
  • using System.Collections.Generic;
  • using System.Linq;
  • using System.Net.Http;
  • using System.Threading;
  • using System.Threading.Tasks;

其他应用程序类型包括更多对这些应用程序类型通用的命名空间。

如果需要未隐式包含的 using 指令,可以将这些指令添加到包含顶级语句的 .cs 文件或其他 .cs 文件中。 对于应用程序的所有 .cs 文件中所需的 using 指令,请使用全局 using 指令

禁用隐式 using 指令

如果想删除此行为并手动控制项目中的所有命名空间,请将 <ImplicitUsings>disable</ImplicitUsings> 添加到项目文件的 <PropertyGroup> 元素中,如以下示例所示:

XML复制

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    ...
    <ImplicitUsings>disable</ImplicitUsings>
  </PropertyGroup>

</Project>

全局 using 指令

全局 using 指令导入整个应用程序的命名空间,而不是单个文件。 可以通过向项目文件添加 <Using> 项或将 global using 指令添加到代码文件来添加这些全局指令。

还可以在项目文件中添加一个具有 Remove 属性的 <Using> 项,以删除特定的隐式 using 指令。 例如,如果通过 <ImplicitUsings>enable</ImplicitUsings> 启用隐式 using 指令功能,则添加以下 <Using> 项会从隐式导入的命名空间中删除 System.Net.Http 命名空间:

XML复制

<ItemGroup>
  <Using Remove="System.Net.Http" />
</ItemGroup>

使用旧程序样式

从 .NET SDK 6.0.300 开始,console 模板具有选项 --use-program-main。 请使用它来创建不使用顶级语句且具有 Main 方法的控制台项目。

.NET CLI复制

dotnet new console --use-program-main

生成的 Program.cs 如下所示:

C#复制

namespace MyProject;
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello, World!");
    }
}

在 Visual Studio 中使用旧程序样式

  1. 创建新项目时,设置步骤将导航到“其他信息”设置页。 在此页上,选择“不要使用顶级语句”复选框。

    Visual Studio do not use top-level statements check box

  2. 创建项目后,Program.cs 内容如下所示:

    C#复制

    namespace MyProject;
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
        }
    }
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将 C# 控制台应用最小化到托盘,需要使用 NotifyIcon 类。这个类可以在系统托盘区域中显示一个图标,并提供与该图标相关的上下文菜单和事件。下面是一个示例代码: ```csharp using System; using System.Drawing; using System.Windows.Forms; class Program { static NotifyIcon notifyIcon; static void Main(string[] args) { // 创建一个 NotifyIcon 对象 notifyIcon = new NotifyIcon(); notifyIcon.Icon = new Icon("icon.ico"); notifyIcon.Text = "控制台应用程序"; // 添加右键菜单 ContextMenu menu = new ContextMenu(); menu.MenuItems.Add(new MenuItem("退出", OnExit)); notifyIcon.ContextMenu = menu; // 显示 NotifyIcon notifyIcon.Visible = true; // 等待用户输入 Console.ReadLine(); // 隐藏控制台窗口 IntPtr hWnd = NativeMethods.GetConsoleWindow(); NativeMethods.ShowWindow(hWnd, NativeMethods.SW_HIDE); // 显示 NotifyIcon 提示 notifyIcon.ShowBalloonTip(1000, "控制台应用程序", "已最小化到托盘。", ToolTipIcon.Info); } static void OnExit(object sender, EventArgs e) { // 退出应用程序 notifyIcon.Visible = false; Environment.Exit(0); } } class NativeMethods { public const int SW_HIDE = 0; [System.Runtime.InteropServices.DllImport("kernel32.dll")] public static extern IntPtr GetConsoleWindow(); [System.Runtime.InteropServices.DllImport("user32.dll")] public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); } ``` 在这个示例代码中,我们创建了一个 NotifyIcon 对象,并设置它的图标和文本。我们还添加了一个右键菜单,当用户选择“退出”时,调用 OnExit 方法退出应用程序。 在控制台应用程序等待用户输入后,我们使用 NativeMethods.ShowWindow 将控制台窗口隐藏,并调用 notifyIcon.ShowBalloonTip 方法显示一个提示。这样,控制台应用程序就会最小化到托盘了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值