2026/8/15 12:48:51
网站建设
项目流程
附录 A:C# 关键字速查表 完整的 C# 关键字列表,按类别分类,包含用途说明和简单示例
本附录目录 访问修饰符 类型声明 成员修饰符 方法参数修饰符 命名空间与引用 控制流语句 异常处理 类型转换与检查 字面量与特殊值 泛型 上下文关键字 内存与指针 预处理指令 查询关键字 运算符关键字 内置类型别名 特殊用途关键字 版本特性标记 使用建议 访问修饰符 关键字 用途 示例 public公共访问,任何代码都可访问 public class MyClass { }private私有访问,仅当前类内可访问 private int _count;protected受保护访问,当前类及派生类可访问 protected void Calculate() { }internal内部访问,同一程序集内可访问 internal class Helper { }protected internal受保护内部访问,同一程序集或派生类可访问 protected internal string Name;private protected私有受保护访问,同一程序集内的派生类可访问(C# 7.2+) private protected int _value;file文件范围访问,仅当前文件可访问(C# 11+) file class LocalHelper { }
类型声明 关键字 用途 示例 class定义类 class Person { }struct定义结构体(值类型) struct Point { public int X, Y; }interface定义接口 interface ILogger { void Log(string message); }enum定义枚举 enum Status { Active, Inactive }record定义记录类型(不可变引用类型,C# 9.0+) record Person(string Name, int Age);record struct定义记录结构体(不可变值类型,C# 10+) record struct Point(int X, int Y);delegate定义委托 delegate void EventHandler(object sender);
成员修饰符 关键字 用途 示例 static静态成员,属于类型而非实例 public static int Count;const常量,编译时确定的不可变值 const double PI = 3.14159;readonly只读字段,只能在声明或构造函数中赋值 readonly string _name;volatile易失字段,防止编译器优化(多线程场景) volatile bool _isRunning;virtual虚方法,可被派生类重写 public virtual void Draw() { }abstract抽象成员,必须在派生类中实现 public abstract void Process();override重写基类的虚方法或抽象方法 public override void Draw() { }sealed密封类(不可继承)或密封方法(不可重写) public sealed class FinalClass { }new隐藏基类成员 public new void Display() { }partial部分类型定义,可跨多个文件 partial class Customer { }required必需成员,必须在对象初始化时设置(C# 11+) public required string Name { get; set; }
方法参数修饰符 关键字 用途 示例 ref引用传递,调用前必须初始化 void Increment(ref int value) { value++; }out输出参数,方法内必须赋值 bool TryParse(string s, out int result) { }in只读引用传递,避免复制大型结构体(C# 7.2+) void Process(in LargeStruct data) { }params可变参数,接受任意数量的参数 void Print(params string[] messages) { }
命名空间与引用 关键字 用途 示例 namespace定义命名空间 namespace MyApp.Services { }using引入命名空间或定义别名 using System; using Alias = System.Text;extern声明外部程序集别名 extern alias OldVersion;
控制流语句 关键字 用途 示例 if条件判断 if (x > 0) { }elseif 的否定分支 if (x > 0) { } else { }switch多分支选择 switch (x) { case 1: break; }caseswitch 的分支 case 1: Console.WriteLine("One"); break;defaultswitch 的默认分支 default: Console.WriteLine("Other"); break;while前置条件循环 while (i < 10) { i++; }do后置条件循环 do { i++; } while (i < 10);for计数循环 for (int i = 0; i < 10; i++) { }foreach遍历集合 foreach (var item in list) { }break退出循环或 switch while (true) { break; }continue跳过本次循环 for (int i = 0; i < 10; i++) { if (i == 5) continue; }goto无条件跳转(不推荐使用) goto Label; Label: Console.WriteLine("Here");return返回方法结果并退出方法 return 42;
异常处理 关键字 用途 示例 try定义可能抛出异常的代码块 try { RiskyOperation(); }catch捕获异常 catch (Exception ex) { }finally无论是否异常都会执行的代码块 finally { Cleanup(); }throw抛出异常 throw new InvalidOperationException();when异常过滤器(C# 6.0+) catch (HttpException ex) when (ex.StatusCode == 404) { }
类型转换与检查 关键字 用途 示例 as安全类型转换,失败返回 null var obj = value as string;is类型检查,返回 bool if (obj is string s) { }typeof获取类型的 Type 对象 Type t = typeof(int);sizeof获取值类型的字节大小 int size = sizeof(int); // 4
字面量与特殊值 关键字 用途 示例 null空引用 string s = null;true布尔真值 bool flag = true;false布尔假值 bool flag = false;default类型的默认值 int x = default; // 0
泛型 关键字 用途 示例 where泛型约束 class List<T> where T : class { }
泛型约束类型 :
where T : class- T 必须是引用类型where T : struct- T 必须是值类型where T : new()- T 必须有无参构造函数where T : BaseClass- T 必须继承自 BaseClasswhere T : IInterface- T 必须实现 IInterfacewhere T : U- T 必须是 U 或从 U 派生上下文关键字(仅在特定上下文有特殊含义) 关键字 用途 示例 add定义事件访问器(添加订阅) event EventHandler Click { add { } remove { } }remove定义事件访问器(移除订阅) 同上 get定义属性的获取访问器 public int Age { get; set; }set定义属性的设置访问器 同上 init定义仅初始化访问器(C# 9.0+) public string Name { get; init; }value属性或索引器设置器中的隐式参数 set { _value = value; }var隐式类型局部变量 var list = new List<int>();dynamic动态类型,运行时绑定 dynamic obj = GetObject();async异步方法修饰符 async Task<int> GetDataAsync() { }await等待异步操作完成 var result = await GetDataAsync();yield迭代器返回元素 yield return item;global全局命名空间别名 global::System.Console.WriteLine();alias引用外部程序集别名 extern alias GridV1;fromLINQ 查询表达式的起始 from item in listselectLINQ 查询投影 select item.NamewhereLINQ 查询过滤条件 where item.Age > 18orderbyLINQ 查询排序 orderby item.NamegroupLINQ 查询分组 group item by item.CategoryjoinLINQ 查询连接 join order in orders on item.Id equals order.ItemIdintoLINQ 查询延续 group item by item.Category into gletLINQ 查询临时变量 let total = item.Price * item.QuantityascendingLINQ 升序排序 orderby item.Name ascendingdescendingLINQ 降序排序 orderby item.Name descendingonLINQ join 条件 on item.Id equals order.ItemIdequalsLINQ join 相等比较 同上 byLINQ group 分组键 group item by item.Categorynameof获取符号的字符串名称(C# 6.0+) string name = nameof(variable);when模式匹配守卫(C# 7.0+) case int n when n > 0:and模式匹配逻辑与(C# 9.0+) is > 0 and < 100or模式匹配逻辑或(C# 9.0+) is "red" or "blue"not模式匹配逻辑非(C# 9.0+) is not nullwith记录类型的非破坏性修改(C# 9.0+) var person2 = person1 with { Age = 30 };record记录类型声明(C# 9.0+) record Person(string Name, int Age);init仅初始化属性(C# 9.0+) public string Name { get; init; }nint本机大小整数(C# 9.0+) nint ptr = 0;nuint无符号本机大小整数(C# 9.0+) nuint size = 100;unmanaged泛型约束:非托管类型(C# 7.3+) where T : unmanagednotnull泛型约束:非空类型(C# 8.0+) where T : notnullmanaged上下文关键字(C# 预留) - scoped限制引用的生命周期(C# 11+) scoped Span<int> span = stackalloc int[10];file文件范围类型(C# 11+) file class Helper { }required必需成员(C# 11+) public required string Name { get; set; }
内存与指针(仅在不安全代码中) 关键字 用途 示例 unsafe允许不安全代码(指针操作) unsafe { int* ptr = &value; }fixed固定对象防止垃圾回收移动 fixed (int* ptr = &array[0]) { }stackalloc在栈上分配内存 Span<int> span = stackalloc int[10];
预处理指令(以 # 开头,编译时处理) 指令 用途 示例 #if条件编译 #if DEBUG#else条件编译否定分支 #else#elif条件编译的 else if #elif RELEASE#endif结束条件编译 #endif#define定义预处理符号 #define DEBUG#undef取消定义预处理符号 #undef DEBUG#warning生成编译警告 #warning "This is deprecated"#error生成编译错误 #error "Not supported"#line修改编译器的行号和文件名 #line 100 "MyFile.cs"#region定义可折叠区域 #region Properties#endregion结束可折叠区域 #endregion#pragma编译器指令 #pragma warning disable CS0168#nullable可空引用类型指令(C# 8.0+) #nullable enable
查询关键字(LINQ 查询语法) 关键字 用途 示例 from指定数据源和范围变量 from item in collectionwhere过滤条件 where item.Price > 100select投影结果 select item.Namegroup分组 group item by item.Categoryinto延续查询 group item by item.Category into gorderby排序 orderby item.Price descendingjoin连接 join order in orders on item.Id equals order.ItemIdlet引入范围变量 let total = item.Price * item.Quantityascending升序 orderby item.Name ascendingdescending降序 orderby item.Name descendingonjoin 条件 on item.Id equals order.ItemIdequalsjoin 相等比较 同上 bygroup 分组键 by item.Categoryin指定集合 from item in collection
运算符关键字 关键字 用途 示例 new创建对象或数组 new Person()checked启用溢出检查 checked { int x = int.MaxValue + 1; }unchecked禁用溢出检查 unchecked { int x = int.MaxValue + 1; }
内置类型别名 关键字 对应 .NET 类型 字节大小 boolSystem.Boolean1 byteSystem.Byte1 sbyteSystem.SByte1 charSystem.Char2 decimalSystem.Decimal16 doubleSystem.Double8 floatSystem.Single4 intSystem.Int324 uintSystem.UInt324 nintSystem.IntPtr平台相关 nuintSystem.UIntPtr平台相关 longSystem.Int648 ulongSystem.UInt648 shortSystem.Int162 ushortSystem.UInt162 objectSystem.Object- stringSystem.String- voidSystem.Void-
特殊用途关键字 关键字 用途 示例 this引用当前实例 this.Name = name;base引用基类成员 base.ToString();lock线程同步锁 lock (obj) { }event声明事件 public event EventHandler Click;operator运算符重载 public static Point operator +(Point a, Point b) { }implicit隐式类型转换 public static implicit operator int(MyType x) { }explicit显式类型转换 public static explicit operator int(MyType x) { }
版本特性标记 以下是不同 C# 版本引入的关键字和特性:
C# 6.0 (2015) C# 7.0 (2017) C# 7.2 (2017) in参数修饰符ref readonlyprivate protected访问修饰符C# 7.3 (2018) C# 8.0 (2019) notnull泛型约束可空引用类型(#nullable) switch表达式using声明C# 9.0 (2020) recordinit访问器with表达式and、or、not模式匹配nint、nuintC# 10 (2021) record structglobal using文件范围命名空间 C# 11 (2022) required成员file类型修饰符scoped关键字C# 12 (2023) 使用建议 避免使用goto :会降低代码可读性,几乎所有场景都有更好的替代方案谨慎使用unsafe :不安全代码绕过类型安全检查,仅在性能关键场景使用优先使用var :当类型明显时使用var可以提高代码简洁性使用nameof :重构时自动更新字符串,避免硬编码启用可空引用类型 :在项目中启用#nullable enable减少空引用异常快速查找 :使用 Ctrl+F 搜索关键字名称即可快速定位到详细说明。