网站Logo 简单生活

C# 语法概述

zb2947244682
1
2025-08-14

C# 14 语法概述

C# 14 是 C# 编程语言的最新版本,与 .NET 10 一起发布(目前处于预览阶段,预计 2025 年 11 月正式发布)。它构建在之前的 C# 版本基础上,因此其语法包括所有经典 C# 元素,并引入了一些新特性来提升代码简洁性、性能和灵活性。作为一个想学习的用户,我会先从基础语法开始讲解,这些是 C# 的核心,无论版本如何。然后,我会详细说明 C# 14 的新语法特性,包括描述、语法解释和代码示例。

注意:C# 是静态类型、面向对象的语言,支持泛型、LINQ 等高级功能。要运行 C# 代码,你需要 Visual Studio 或 .NET SDK。基础语法在所有版本中一致,新特性需要在项目中启用 C# 14(通过 <LangVersion>14</LangVersion> 在 .csproj 文件中)。

1. 基础 C# 语法

C# 程序的基本结构是一个命名空间中的类,包含 Main 方法作为入口点。下面从简单到复杂逐步讲解。

1.1 程序结构和命名空间
  • C# 代码通常组织在命名空间中。
  • 入口点是 static void Main(string[] args) 方法。

示例:

using System;  // 导入命名空间

namespace MyApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
        }
    }
}
1.2 变量和数据类型
  • 变量声明:类型 变量名 = 值;
  • 基本类型:int、double、string、bool、char 等。
  • 支持 var 隐式类型(编译时推断)。
  • 常量:const 类型 变量名 = 值;

示例:

int age = 25;  // 整数
double height = 1.75;  // 浮点数
string name = "Alice";  // 字符串
bool isStudent = true;  // 布尔
var score = 90.5;  // 隐式类型 (double)
const int MaxAge = 100;  // 常量
1.3 运算符和表达式
  • 算术:+、-、*、/、%
  • 比较:==、!=、>、<、>=、<=
  • 逻辑:&&、||、!
  • 赋值:=、+=、-= 等
  • 三元运算符:条件 ? 值1 : 值2

示例:

int x = 10;
int y = 5;
int sum = x + y;  // 15
bool isGreater = x > y;  // true
string result = (x > y) ? "x 大" : "y 大";  // "x 大"
x += 2;  // x 现在是 12
1.4 控制结构
  • if-else:
if (age > 18)
{
    Console.WriteLine("成人");
}
else
{
    Console.WriteLine("未成年");
}
  • switch:
switch (day)
{
    case 1:
        Console.WriteLine("周一");
        break;
    default:
        Console.WriteLine("未知");
        break;
}
  • 循环:for、while、do-while、foreach
for (int i = 0; i < 5; i++)
{
    Console.WriteLine(i);
}

int[] numbers = {1, 2, 3};
foreach (int num in numbers)
{
    Console.WriteLine(num);
}
1.5 方法(函数)
  • 定义:访问修饰符 返回类型 方法名(参数) { ... }
  • 支持重载(同名不同参数)。

示例:

public int Add(int a, int b)
{
    return a + b;
}

// 调用
int result = Add(3, 4);  // 7
  • Lambda 表达式(匿名方法):
Func<int, int> square = x => x * x;
Console.WriteLine(square(5));  // 25
1.6 类和对象
  • 类定义:class 类名 { ... }
  • 属性:public 类型 属性名 { get; set; }
  • 构造函数:public 类名(参数) { ... }

示例:

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }

    public void Greet()
    {
        Console.WriteLine($"Hello, {Name}!");
    }
}

// 使用
Person p = new Person("Bob", 30);
p.Greet();
1.7 继承和接口
  • 继承:class 子类 : 基类
  • 接口:interface 接口名 { 方法签名; }

示例:

interface IAnimal
{
    void Speak();
}

class Dog : IAnimal
{
    public void Speak()
    {
        Console.WriteLine("Woof!");
    }
}
1.8 数组、集合和泛型
  • 数组:类型[] 数组名 = new 类型[大小];
  • List:动态集合。
  • 泛型:class MyClass { ... }

示例:

int[] arr = {1, 2, 3};
List<string> names = new List<string> { "A", "B" };
names.Add("C");
1.9 异常处理
  • try-catch-finally

示例:

try
{
    int div = 10 / 0;
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}
finally
{
    Console.WriteLine("清理");
}
1.10 其他基础元素
  • 枚举:enum Day { Monday, Tuesday };
  • 委托:delegate void MyDelegate(string msg);
  • 事件:event MyDelegate OnEvent;
  • LINQ:查询语法,如 from x in collection where x > 0 select x;

这些是 C# 的核心基础。如果你需要深入某个部分,可以问具体主题。

2. C# 14 的新语法特性

C# 14 引入了几个新特性,主要聚焦于简化代码、提升性能和扩展语言表达力。下面是所有主要新特性的详细讲解,基于官方文档和相关文章。<grok:render card_id="e809ee" card_type="citation_card" type="render_inline_citation">
1
</grok:render><grok:render card_id="5ba13e" card_type="citation_card" type="render_inline_citation">
22
</grok:render>

2.1 Extension Members (扩展成员,也称“扩展一切”)

描述: 允许定义扩展属性、索引器和静态扩展成员,而不仅仅是扩展方法。这些成员可以扩展实例或类型本身,看起来像扩展类型的静态成员。

语法解释: 使用 extension 关键字定义扩展块,指定接收者类型在括号中。实例成员有接收者参数,静态成员没有。

代码示例:

public static class EnumerableExtensions
{
    // 实例扩展
    extension<T>(IEnumerable<T> source)
    {
        public bool IsEmpty => !source.Any();
        public T this[int index] => source.Skip(index).First();
    }

    // 静态扩展
    extension<T>(IEnumerable<T>)
    {
        public static IEnumerable<T> Empty => Enumerable.Empty<T>();
    }
}

// 使用
IEnumerable<int> seq = new[] {1, 2};
bool empty = seq.IsEmpty;  // false
IEnumerable<int> emptySeq = IEnumerable<int>.Empty;
2.2 The field Keyword (field 关键字)

描述: 在属性访问器中使用 field 访问编译器生成的 backing field,而无需显式声明字段。这简化了属性逻辑,如空检查(从 C# 13 预览中正式引入)。

语法解释: 在 get 或 set 中使用 field。如果有命名冲突,使用 @fieldthis.field

代码示例:

public class Product
{
    public string Name
    {
        get => field;
        set => field = value?.Trim() ?? throw new ArgumentNullException(nameof(value));
    }
}
2.3 Implicit Span Conversions (隐式 Span 转换)

描述:Span<T>ReadOnlySpan<T> 提供一级语言支持,包括与数组的隐式转换,提升性能和内存安全。

语法解释: 支持 ReadOnlySpan<T>Span<T>T[] 之间的隐式转换,可作为扩展方法接收者和泛型推断。

代码示例:

Span<int> span = new int[10];  // 从数组隐式转换
ReadOnlySpan<char> ros = "hello";  // 从字符串隐式
2.4 Unbound Generic Types with nameof (nameof 支持未绑定泛型类型)

描述: nameof 运算符现在支持未绑定泛型类型,返回类型名而无需指定类型参数。

语法解释: 直接使用如 nameof(List<>)

代码示例:

string typeName = nameof(List<>);  // "List"
2.5 Modifiers on Simple Lambda Parameters (简单 Lambda 参数的修饰符)

描述: Lambda 参数可以添加 refinoutscoped 等修饰符,而无需指定类型,简化 Lambda 语法(params 除外)。

语法解释: 参数列表中直接添加修饰符。

代码示例:

delegate bool TryParse<T>(string text, out T result);
TryParse<int> parse = (text, out result) => int.TryParse(text, out result);
2.6 More Partial Members (更多部分成员,包括部分构造函数和事件)

描述: 扩展部分类型支持实例构造函数和事件,允许签名在一个部分中定义,实现 在另一个中。

语法解释: 部分构造函数需要一个定义声明和一个实现声明;事件需要 get/remove 访问器。

代码示例:(示例基于描述,无官方代码)

// File1.cs
partial class MyClass
{
    partial MyClass(int x);  // 定义
    partial event EventHandler MyEvent;  // 定义
}

// File2.cs
partial class MyClass
{
    partial MyClass(int x) { /* 实现 */ }
    partial event EventHandler MyEvent { add { ... } remove { ... } }  // 实现
}

这些新特性使 C# 更现代化。如果你想练习代码或深入某个特性,告诉我!

动物装饰