C# 无处不在:如何无痛编写跨平台应用

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

为什么 C# 不仅仅局限于 Windows?

\n\n

长期以来,C# 一直与微软和 Windows 生态系统紧密关联。想要为 Linux 或 macOS 编写代码的开发者,往往会转向 Java、Python 或 JavaScript。但时代已经变了。随着 .NET Core(以及随后的 .NET 5/6/7/8)的发布,微软果断迈入了开源和跨平台的世界。

\n\n

如今,C# 是一种强大、现代的语言,可以用来构建一切:从 Linux 服务器的控制台工具,到 iOS 和 Android 的移动应用。所有这些都使用同一种语言、同一个 IDE(Rider 或 VS Code),并且重要的是,拥有统一的业务逻辑代码。

\n\n

在本文中,我们将探讨哪些技术允许你用 C# 编写跨平台应用,对它们进行比较,展示实际代码,并提供实用建议。如果你认为 C# “只适用于 Windows”,请准备好大吃一惊。

\n\n

.NET 跨平台能力的演进

\n\n

C# 走向跨平台的道路是漫长的。让我们回顾一下主要的里程碑:

\n\n
    \n
  • Mono (2004) — 首个面向 Linux 的 .NET Framework 开源实现。可以运行,但有限制。
  • \n
  • Xamarin (2011) — 允许用 C# 为 iOS 和 Android 编写移动应用。真正的突破。
  • \n
  • .NET Core (2016) — 完全重写、模块化、跨平台的框架。开源。
  • \n
  • .NET 5+ (2020) — 统一所有分支:.NET Framework、.NET Core 和 Xamarin 合并为统一的 .NET。
  • \n
  • .NET MAUI (2022) — Xamarin.Forms 的演进,用于为所有平台创建原生 UI。
  • \n
\n\n

现在,在 2024 年,我们拥有成熟的工具集,可以为任何平台进行开发。让我们看看主要选项。

\n\n

C# 跨平台开发的主要技术

\n\n

技术的选择取决于你具体要编写什么。我们确定了四个主要方向:

\n\n

1. .NET MAUI — 原生移动和桌面应用

\n\n

.NET MAUI(多平台应用 UI)是一个用于创建用户界面的框架,这些界面可在 Android、iOS、macOS、Windows 以及(实验性地)Linux 上运行。你只需编写一次 XAML 标记和 C# 逻辑,就能获得原生应用。

\n\n

代码示例:一个简单的计数器应用

\n\n
<!-- MainPage.xaml -->\n<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"\n             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"\n             x:Class="MauiApp1.MainPage">\n    <VerticalStackLayout Padding="30" Spacing="25">\n        <Label Text="你好,跨平台!"\n               FontSize="32"\n               HorizontalOptions="Center"/>\n        <Label x:Name="CounterLabel"\n               Text="0"\n               FontSize="48"\n               HorizontalOptions="Center"/>\n        <Button Text="点我"\n                Clicked="OnCounterClicked"\n                HorizontalOptions="Center"/>\n    </VerticalStackLayout>\n</ContentPage>
\n\n
// MainPage.xaml.cs\nnamespace MauiApp1;\n\npublic partial class MainPage : ContentPage\n{\n    private int _count = 0;\n\n    public MainPage()\n    {\n        InitializeComponent();\n    }\n\n    private void OnCounterClicked(object sender, EventArgs e)\n    {\n        _count++;\n        CounterLabel.Text = _count.ToString();\n    }\n}
\n\n

这段代码无需修改即可在 iPhone、Android 智能手机、MacBook 和 Windows PC 上运行。对于 Linux,需要额外配置,但社区正在积极解决这个问题。

\n\n

2. Avalonia UI — 适用于 Windows、Linux 和 macOS 的桌面应用,具有独特设计

\n\n

Avalonia 是一个开源框架,其灵感来自 WPF,但完全跨平台。它的主要特点是:它不模拟原生控件,而是通过 SkiaSharp 绘制自己的界面。这提供了完

博客

书籍推荐