天惠 發表於 2025-11-14 09:25:00

从 .NET Core1.0 到 .NET 10:.NET + C# 演进全景

<blockquote>
<p>本文回顾微软 .NET 与 C# 语言从跨平台起步到统一平台、再到现代化性能优化的全过程。每个版本都配有简明 Demo 代码,便于开发者快速掌握特性变化与实践。</p>
</blockquote>
<h4>一、.NET Core 时代:跨平台的开端</h4>
<h5>1. .NET Core 1.x(C# 7.0)</h5>
<ul>
<li>
<p><strong>发布时间</strong>:.NET Core 1.0 于 2016-06-27 发布。</p>
</li>
<li>
<p><strong>意义</strong>:标志 .NET 生态迈向真正跨平台、开源。</p>
</li>
<li>
<p><strong>C# 7.0 核心特性</strong>:</p>
<ul>
<li>
<p>Out 变量内联声明</p>
</li>
<li>
<p>元组 (tuple) 返回多个值</p>
</li>
<li>
<p>模式匹配 (pattern matching)</p>
</li>
</ul>
</li>
<li>
<p><strong>Demo 代码</strong>:</p>
</li>
</ul>
<pre><code class="language-csharp">if (int.TryParse("123", out int number)) // Out 变量内联
{
    Console.WriteLine(number);
}

(string name, int age) GetPerson() =&gt; ("Alice", 30); // 元组
var person = GetPerson();
Console.WriteLine($"Name: {person.name}, Age: {person.age}");

object obj = "Hello";
if (obj is string str) // 模式匹配
{
    Console.WriteLine(str.Length);
}</code></pre>
<h5>2. .NET Core 2.x(C# 7.1~7.3)</h5>
<ul>
<li>
<p><strong>发布时间</strong>:.NET Core 2.0 于 2017-08-14 发布。</p>
</li>
<li>
<p><strong>意义</strong>:性能大幅提升,支持 .NET Standard 2.0,库生态更加丰富。</p>
</li>
<li>
<p><strong>C# 7.1~7.3 核心特性</strong>:</p>
<ul>
<li>
<p>async Main 方法</p>
</li>
<li>
<p>默认表达式 (default literal)</p>
</li>
<li>
<p>元组投影初始值设定项(tuple element name inference)</p>
</li>
</ul>
</li>
<li>
<p><strong>Demo 代码</strong>:</p>
</li>
</ul>
<pre><code class="language-csharp">public static async Task Main(string[] args) // async Main
{
    await Task.Delay(100);
    Console.WriteLine("Async Main done");
}

int number = default; // 默认表达式
var tuple = (name: "Alice", age: 30); // 元组投影初始值
Console.WriteLine($"Name: {tuple.name}, Age: {tuple.age}");</code></pre>
<h5>3. .NET Core 3.x(C# 8.0)</h5>
<ul>
<li>
<p><strong>发布时间</strong>:.NET Core 3.0 于 2019-09-23 发布。</p>
</li>
<li>
<p><strong>意义</strong>:首次将 Windows 桌面(WPF/WinForms)纳入 .NET Core 支持,并引入高性能结构如 Span。</p>
</li>
<li>
<p><strong>C# 8.0 核心特性</strong>:</p>
<ul>
<li>
<p>可空引用类型 (nullable reference types)</p>
</li>
<li>
<p>异步流 (async IAsyncEnumerable)</p>
</li>
<li>
<p>模式和索引 (indices &amp; ranges)</p>
</li>
<li>
<p>using 声明简化 (using var)</p>
</li>
</ul>
</li>
<li>
<p><strong>Demo 代码</strong>:</p>
</li>
</ul>
<pre><code class="language-csharp">string? nullableString = null; // 可空引用类型

async IAsyncEnumerable&lt;int&gt; GetAsyncNumbers()
{
    for (int i = 0; i &lt; 5; i++)
    {
      await Task.Delay(50);
      yield return i;
    }
}

await foreach (var n in GetAsyncNumbers())
{
    Console.WriteLine(n);
}

using var reader = new StreamReader("file.txt"); // using 声明
int[] arr = {1, 2, 3, 4};
int last = arr[^1]; // 索引操作
Console.WriteLine(last);</code></pre>
<h4>二、统一平台时代:.NET 5 到 .NET 10</h4>
<h5>4. .NET 5(C# 9.0)</h5>
<ul>
<li>
<p><strong>发布时间</strong>:.NET 5 于 2020-11-10 发布。</p>
</li>
<li>
<p><strong>意义</strong>:标志 “.NET Framework” + “.NET Core” 向统一 .NET 平台合并。</p>
</li>
<li>
<p><strong>C# 9.0 核心特性</strong>:</p>
<ul>
<li>
<p>记录类型 (record)</p>
</li>
<li>
<p>顶级语句 (top-level statements)</p>
</li>
<li>
<p>模式匹配增强(关系模式、逻辑模式)</p>
</li>
</ul>
</li>
<li>
<p><strong>Demo 代码</strong>:</p>
</li>
</ul>
<pre><code class="language-csharp">public record Person(string FirstName, string LastName); // 记录类型

// 顶级语句
Console.WriteLine("Hello, World from C# 9!");

// 模式匹配增强
Person person = new("Alice", "Smith");
if (person is { LastName: "Smith" })
{
    Console.WriteLine("Found Smith");
}</code></pre>
<h5>5. .NET 6(C# 10.0)</h5>
<ul>
<li>
<p><strong>发布时间</strong>:.NET 6 于 2021-11-08 发布。</p>
</li>
<li>
<p><strong>意义</strong>:LTS(长期支持)版,推进统一平台愿景,性能与开发体验进一步优化。</p>
</li>
<li>
<p><strong>C# 10.0 核心特性</strong>:</p>
<ul>
<li>
<p>全局 using 指令 (global using)</p>
</li>
<li>
<p>文件范围的命名空间 (file-scoped namespace)</p>
</li>
<li>
<p>记录结构 (record struct)</p>
</li>
<li>
<p>常量插值字符串 (constant interpolated strings)</p>
</li>
</ul>
</li>
<li>
<p><strong>Demo 代码</strong>:</p>
</li>
</ul>
<pre><code class="language-csharp">// GlobalUsings.cs
global using System;
global using System.Collections.Generic;

// Program.cs
namespace MyApp; // 文件范围命名空间

public readonly record struct Point(int X, int Y); // 记录结构

const string name = "World";
const string greeting = $"Hello, {name}!"; // 常量插值字符串

Console.WriteLine(greeting);</code></pre>
<h5>6. .NET 7(C# 11.0)</h5>
<ul>
<li>
<p><strong>发布时间</strong>:.NET 7 于 2022-11-08 发布。</p>
</li>
<li>
<p><strong>意义</strong>:专注于性能提升、云原生支持、AOT(前向编译)改进。</p>
</li>
<li>
<p><strong>C# 11.0 核心特性</strong>:</p>
<ul>
<li>
<p>原始字符串字面量 (raw string literals)</p>
</li>
<li>
<p>列表模式 (list patterns)</p>
</li>
<li>
<p>必需成员 (required members)</p>
</li>
<li>
<p>泛型数学 (generic math)</p>
</li>
</ul>
</li>
<li>
<p><strong>Demo 代码</strong>:</p>
</li>
</ul>
<pre><code class="language-csharp">string xml = """
&lt;person&gt;
    &lt;name&gt;Alice&lt;/name&gt;
    &lt;age&gt;30&lt;/age&gt;
&lt;/person&gt;
"""; // 原始字符串字面量

public class Person
{
    public required string FirstName { get; set; }
    public required string LastName { get; set; }
}

// 泛型数学 简化示例
static T Add&lt;T&gt;(T x, T y) where T : System.Numerics.INumber&lt;T&gt;
    =&gt; x + y;

Console.WriteLine(Add&lt;int&gt;(3, 4));</code></pre>
<h5>7. .NET 8(C# 12.0)</h5>
<ul>
<li>
<p><strong>发布时间</strong>:.NET 8,于 2023-11 发布(实际 2023-11-14)</p>
</li>
<li>
<p><strong>意义</strong>:LTS 版,原生 AOT 正式版、进一步性能优化。</p>
</li>
<li>
<p><strong>C# 12.0 核心特性</strong>:</p>
<ul>
<li>
<p>主构造函数 (primary constructors) 支持所有 class/struct。(Microsoft Learn)</p>
</li>
<li>
<p>集合表达式 (collection expressions) 和扩展初始化语法。<br>
-(还包括别名任意类型(using alias any type)、inline 数组等)</p>




</li>




</ul>




</li>
<li>
<p><strong>Demo 代码</strong>:</p>




</li>




</ul>
<pre><code class="language-csharp">// 主构造函数示例
public class Person(string name, int age) // C# 12 主构造函数
{
    public string Name =&gt; name;
    public int Age =&gt; age;
}

// 集合表达式示例
int[] array = ;
List&lt;int&gt; list = ;

// 使用 spread 运算符 ..(假设已支持)
int[] other = ;
int[] combined = ;</code></pre>
<h5>8. .NET 9(C# 13.0)</h5>
<ul>
<li>
<p><strong>发布时间</strong>:.NET 9 于 2024-11-12 发布。</p>
</li>
<li>
<p><strong>意义</strong>:继续推进性能优化、智能化开发(AI 集成等)</p>
</li>
<li>
<p><strong>C# 13.0 核心特性</strong>(你原文提及)包括:</p>
<ul>
<li>
<p>params 集合增强(支持任意集合类型而不仅是数组)</p>
</li>
<li>
<p><code>field</code> 关键字 简化属性访问器中字段引用</p>
</li>
<li>
<p>ref struct 实现接口</p>
</li>
<li>
<p>部分属性和索引器增强</p>
</li>
</ul>
</li>
<li>
<p><strong>说明</strong>:经校验发现,关于这些具体特性的官方资料仍较少、属于预览或提案阶段。建议在博客中注明 “预览/提案” 状态。</p>
</li>
<li>
<p><strong>Demo 代码(按你原文)</strong>:</p>
</li>
</ul>
<pre><code class="language-csharp">public void ProcessItems(params ReadOnlySpan&lt;int&gt; items) // params 集合增强
{
    foreach (var item in items)
    {
      Console.WriteLine(item);
    }
}

public class Example
{
    private int _backing;
    public string Name
    {
      get;
      set =&gt; field = value ?? throw new ArgumentNullException(nameof(value)); // field 关键字
    }
}</code></pre>
<h5>9. .NET 10(C# 14.0)</h5>
<ul>
<li>
<p><strong>发布时间</strong>:.NET 10 目前为最新里程碑版本。</p>
</li>
<li>
<p><strong>意义</strong>:进一步提升开发者生产力、性能表现。</p>
</li>
<li>
<p><strong>C# 14.0 核心特性</strong>:</p>
<ul>
<li>
<p>扩展成员 (extension members):新增扩展属性、静态扩展成员、用户定义运算符等。(Microsoft Learn)</p>
</li>
<li>
<p>空条件赋值 (null-conditional assignment):可以在左侧使用 <code>?.</code> 进行赋值。</p>
</li>
<li>
<p><code>nameof</code> 支持未绑定泛型</p>
</li>
<li>
<p>Lambda 参数修饰符简化</p>
</li>
</ul>
</li>
<li>
<p><strong>Demo 代码</strong>:</p>
</li>
</ul>
<pre><code class="language-csharp">// 扩展成员示例(C# 14)
public static class EnumerableExtensions
{
    extension&lt;TSource&gt;(IEnumerable&lt;TSource&gt; source)// 扩展块
    {
      // 扩展属性
      public bool IsEmpty =&gt; !source.Any();

      // 扩展方法
      public IEnumerable&lt;TSource&gt; WhereEven(Func&lt;TSource, bool&gt; predicate)
            =&gt; source.Where(predicate);
    }

    extension&lt;TSource&gt;(IEnumerable&lt;TSource&gt;)// 静态扩展成员
    {
      public static IEnumerable&lt;TSource&gt; Combine(IEnumerable&lt;TSource&gt; first, IEnumerable&lt;TSource&gt; second)
            =&gt; first.Concat(second);

      public static IEnumerable&lt;TSource&gt; Identity =&gt; Enumerable.Empty&lt;TSource&gt;();

      public static IEnumerable&lt;TSource&gt; operator + (IEnumerable&lt;TSource&gt; left, IEnumerable&lt;TSource&gt; right)
            =&gt; left.Concat(right);
    }
}

// 空条件赋值示例
Person? person = null;
person?.Name = "Alice"; // 只有当 person 不为 null 时才赋值

// nameof 支持未绑定泛型
string typeName = nameof(List&lt;&gt;); // "List"

// Lambda 参数修饰简化(示例)
delegate bool TryParse&lt;T&gt;(string s, out T value);
TryParse&lt;int&gt; parse = (s, out value) =&gt; int.TryParse(s, out value);</code></pre>
<h4>三、核心演进趋势总结</h4>
<p>通过从 .NET Core 1.0 到 .NET 10、从 C# 7.0 到 C# 14 的演进,几个核心趋势十分明显:</p>
<ol>
<li>
<p><strong>跨平台与统一化</strong>:从 Windows 专属的 .NET Framework,到真正跨平台的 .NET Core,再到统一平台 .NET。</p>
</li>
<li>
<p><strong>性能持续优化</strong>:运行时、垃圾回收 (GC)、JIT/AOT、结构 (Span) 等不断强化。</p>
</li>
<li>
<p><strong>开发体验简化</strong>:语言特性持续减少样板代码(boilerplate),如顶级语句、全局 using、主构造函数、扩展成员等。</p>
</li>
<li>
<p><strong>现代化/云原生</strong>:容器支持、微服务、AOT、云端运行优化。</p>
</li>
<li>
<p><strong>智能化与扩展能力</strong>:后期语言版本引入扩展成员、泛型数学、AI 集成等,提升 “智能应用” 构建能力。</p>
</li>
</ol>
<h4>四、版本选择建议</h4>
<ul>
<li>
<p><strong>新项目</strong>:推荐使用最新的 LTS 版本(如 .NET 10)以获得最新特性与性能拨优。</p>
</li>
<li>
<p><strong>现有项目迁移</strong>:建议先升级到最近的 LTS(如 .NET 6、.NET 8),然后再考虑迁移至 .NET 10。迁移前需考虑:第三方库支持、语言特性兼容性、开发工具版本(Visual Studio/VS Code)、API 弃用情况等。</p>
</li>
<li>
<p><strong>谨慎预览特性</strong>:对于尚在预览或提案阶段的语言特性(如 C# 13 的某些特性),应慎重使用于生产环境,并注明“预览中”。</p>
</li>
</ul><br><br>
来源:https://www.cnblogs.com/chenyishi/p/19219260
頁: [1]
查看完整版本: 从 .NET Core1.0 到 .NET 10:.NET + C# 演进全景