Skip to content

C# - 概述

C#(发音为“C sharp”)是一门现代的、面向对象的、类型安全的编程语言。它最初由微软在其 .NET 计划中开发,现已发展成为一门多功能、开源的语言,并拥有一个繁荣的生态系统。C# 已经过 ECMA 和 ISO 的标准化,这确保了其稳定性和长期可用性。

C# 最初由 Anders Hejlsberg 的团队为 .NET Framework 设计,现在是现代 .NET 平台(包括 .NET 6、7、8 及更高版本)的主要语言。这个平台是跨平台的,允许开发者使用单一代码库构建可在 Windows、macOS 和 Linux 上原生运行的应用程序。

C# 被设计为与公共语言基础结构(Common Language Infrastructure, CLI)协同工作,CLI 提供了一个运行时环境(公共语言运行时 Common Language Runtime, CLR),能够跨不同平台和架构执行来自各种高级语言的代码。

C# 拥有诸多特性,使其成为一门功能强大且对开发者友好的语言,用于构建健壮、可伸缩的应用程序:

  • 面向对象与组件导向:C# 完全支持封装、继承和多态。它还擅长构建自包含、可重用的软件组件。
  • 类型安全与内存安全:C# 在编译时强制执行严格的类型检查,防止常见的编程错误。它通过垃圾回收器进行自动内存管理,消除了手动内存释放的需要,并防止内存泄漏。
  • 真正的跨平台:借助 .NET,C# 不再仅仅适用于 Windows。你可以使用一流的支持在 Linux、macOS 以及 Docker 等容器中构建和部署应用程序。
  • 高性能:现代 .NET 运行时具有先进的即时 (Just-In-Time, JIT) 编译器、提前 (Ahead-Of-Time, AOT) 编译选项以及持续的性能优化,使 C# 适用于对性能要求严苛的应用程序。
  • 异步编程:内置的 async 和 await 关键字使得编写响应式、非阻塞的代码变得异常简单,这对于 I/O 密集型应用程序(如 Web 服务和基于 UI 的应用)至关重要。
  • 统一而丰富的生态系统:C# 是统一的 .NET 平台的一部分,该平台提供了一套庞大的库(基类库 Base Class Library),涵盖从文件 I/O、网络到数据结构和加密等所有领域。

C# 不断演进,增加了强大的特性,提升了生产力并使代码更简洁。以下是一些亮点:

  • LINQ(语言集成查询):直接在 C# 中编写富有表现力的声明式查询,以处理来自集合、数据库或 XML 的数据。
  • 模式匹配:一种复杂而精巧的方式,用于检查值的“形状”并从中提取信息,从而使条件逻辑更加简洁和可读。
  • 可为空引用类型:一项编译时特性,可帮助你防止 NullReferenceException(空引用异常),这是编程中最常见的 bug 之一。
  • 泛型:创建可与任何数据类型配合使用的灵活、可重用且类型安全的类和方法。
  • 记录类型和不可变性:轻松定义不可变的数据传输对象,这有助于编写更安全、更可预测的代码,尤其是在并发系统中。
  • 顶级语句:C# 9 中新增的特性,它允许你编写简单的程序而无需 Main 方法和 Program 类的样板代码,使初学者更容易上手。

得益于顶级语句,现代 C# 中的“Hello, World!”程序变得异常简单。这单行代码就是一个完整、可运行的程序。

// 这是一个完整的 C# 程序!
System.Console.WriteLine("Hello, Modern C# World!");

要运行此代码,你需要安装 .NET SDK。将代码保存为 Program.cs,在该文件夹中打开终端,然后运行 dotnet run。

作为对比,以下是使用 Main 方法的传统结构,它仍然用于更复杂的应用程序中,并且理解它也很重要:

using System;
nnamespace HelloWorldApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, Traditional C# World!");
}
}
}

C# 是一门真正的通用语言,用于构建各种各样的应用程序:

结合 ASP.NET Core,C# 是构建高性能、可伸缩 Web API 和 Web 应用程序的领先选择。借助 Blazor,你甚至可以使用 C# 而不是 JavaScript 来编写交互式 Web UI。

// ASP.NET Core 中的一个最小化 API 端点
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello from a Web API!");
app.Run();

得益于 Unity 引擎(为数百万款从独立游戏到 AAA 级大作提供动力),C# 是游戏开发领域的主导语言。

// 一个用于移动对象的基本 Unity 脚本
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public float speed = 5.0f;
void Update()
{
float horizontal = Input.GetAxis("Horizontal");
transform.Translate(new Vector3(horizontal, 0, 0) * speed * Time.deltaTime);
}
}

借助 .NET MAUI(Multi-platform App UI,多平台应用 UI),你可以使用 C# 和单一代码库为 Windows、macOS、Android 和 iOS 构建原生应用。对于特定于 Windows 的应用,WPF 和 WinForms 仍然是流行的选择。

<!-- .NET MAUI XAML 文件中的一个简单按钮 -->
<VerticalStackLayout>
<Label Text="Welcome to .NET MAUI!" FontSize="Large" HorizontalOptions="Center" />
<Button Text="Click Me" Clicked="OnCounterClicked" HorizontalOptions="Center" />
</VerticalStackLayout>

C# 是 Microsoft Azure 等云平台上的“一等公民”。它非常适合构建微服务、无服务器函数(Azure Functions)以及在云中运行的可伸缩应用程序。

// 一个响应 HTTP 请求的简单 Azure Function
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
public static class HttpExample
{
[Function("HelloFunction")]
public static IActionResult Run([HttpTrigger(AuthorizationLevel.Anonymous, "get")] HttpRequestData req)
{
return new OkObjectResult("Hello from an Azure Function!");
}
}

借助 ML.NET 等库,你可以将自定义机器学习模型集成到 .NET 应用程序中,用于情感分析、价格预测和图像识别等任务,所有这些都可在 C# 生态系统内完成。

Q1:.NET Framework、.NET Core 和 .NET 之间有什么区别?

Section titled “Q1:.NET Framework、.NET Core 和 .NET 之间有什么区别?”

.NET Framework 是最初的、仅限 Windows 的版本。.NET Core 是开源的、跨平台的重写版本。从 .NET 5 开始,两者被统一为一个平台,简称为 .NET。对于所有新的开发,你都应该使用最新版本的 .NET(例如 .NET 8)。

是的。尽管它是一门功能强大的语言,但其语法清晰且一致。顶级语句的引入使其学习入门变得更加容易。它的强类型特性也有助于初学者及早发现错误。

Q3:C# 的性能与 C++ 或 Python 相比如何?

Section titled “Q3:C# 的性能与 C++ 或 Python 相比如何?”

对于 CPU 密集型任务,C# 比 Python 快得多,因为它是一门编译型语言。在许多场景下,尤其是在 .NET 近期优化之后,它的性能接近 C++,同时还提供了自动内存管理的安全性。