news 2026/5/5 6:10:27

C#各版本特性

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C#各版本特性

C# 1.0(2002年)

  • 基础语法:类、结构体、接口、委托、事件、属性。
  • 基本类型:intstringbool等。
  • 异常处理:try-catch-finally
  • 垃圾回收(GC)机制。

C# 2.0(2005年)

  • 泛型:支持类型安全的集合(如List<T>)。
  • 匿名方法:通过delegate关键字简化委托。
  • 可空类型:Nullable<T>T?语法。
  • 迭代器:yield return简化枚举器实现。
  • 部分类:partial关键字分割类定义。

C# 3.0(2007年)

  • LINQ:语言集成查询(from-where-select语法)。
  • 匿名类型:var x = new { Name = "A" }
  • Lambda表达式:x => x * x替代匿名方法。
  • 扩展方法:通过this修饰静态方法扩展类型。
  • 自动属性:简化属性声明(public int X { get; set; })。

C# 4.0(2010年)

  • 动态类型:dynamic关键字支持运行时类型解析。
  • 命名参数与可选参数:方法调用更灵活。
  • 协变与逆变:泛型接口支持out(协变)和in(逆变)。
  • COM互操作改进:简化Office等组件调用。

C# 5.0(2012年)

  • 异步编程:async/await简化异步代码。
  • Caller信息特性:[CallerMemberName]自动获取调用上下文。

C# 6.0(2015年)

  • Null条件运算符:?.避免空引用异常。
  • 字符串插值:$"{name} is {age}"替代string.Format
  • 表达式体成员:public int X => x * 2;简化单行方法。
  • nameof运算符:编译时获取变量名。
  • 静态导入:using static System.Math直接调用静态方法。

C# 7.0(2017年)

  • 元组与解构:(int x, int y) = GetPoint()
  • 模式匹配:is表达式和switch模式匹配。
  • 局部函数:方法内定义嵌套函数。
  • out变量内联声明:if (int.TryParse(s, out var x))
  • 二进制字面量:0b1010

C# 8.0(2019年)

  • 可空引用类型:显式区分可空与非空引用。
  • 异步流:IAsyncEnumerable<T>支持await foreach
  • 范围和索引:array[1..^1]切片操作。
  • 默认接口方法:接口可包含实现。
  • using声明:隐式作用域简化资源管理。

C# 9.0(2020年)

  • 记录类型:record关键字定义不可变数据模型。
  • 顶级语句:简化控制台程序入口代码。
  • 模式匹配增强:andornot逻辑组合。
  • 目标类型new表达式:Point p = new(1, 2)

C# 10.0(2021年)

  • 全局using指令:全局导入命名空间。
  • 文件级命名空间:减少嵌套代码。
  • 记录结构:record struct定义值类型记录。
  • 插值字符串优化:性能提升。

C# 11.0(2022年)

  • 原始字符串字面量:"""..."""保留格式文本。
  • 泛型数学支持:INumber<T>接口统一数值运算。
  • 必需成员:required修饰符强制初始化属性。
  • 模式匹配改进:列表模式匹配([1, 2, ..])。

C# 12.0(2023年)

  • 主构造函数:类声明中直接定义构造函数参数。
  • 集合表达式:List<int> x = [1, 2, 3];
  • 别名任意类型:using Point = (int x, int y);
  • 默认Lambda参数:Func<int> f = (x = 42) => x;

每个版本均基于.NET运行时更新,部分特性需对应.NET版本支持。

C# 版本特性与 Unity 对应关系

Unity 引擎使用的 C# 版本受限于其内置的 Mono 或 IL2CPP 运行时版本。以下是各版本 C# 的主要特性及其支持的 Unity 版本:


C# 4.0(Unity 5.x 及更早版本)
  • 特性:动态类型(dynamic)、命名参数、可选参数、泛型协变/逆变。
  • Unity 支持:Unity 5.x 及更早版本默认使用 C# 4.0。

C# 5.0(Unity 2017.x 开始部分支持)
  • 特性:异步编程(async/await)、调用方信息特性(CallerMemberName)。
  • Unity 支持:Unity 2017.x 开始支持部分特性(如async/await),但需手动配置编译器。

C# 6.0(Unity 2018.1+ 实验性支持,2018.3+ 正式支持)
  • 特性
    • 空值条件运算符(?.?[])。
    • 字符串插值($"Hello {name}")。
    • nameof表达式。
    • 表达式体成员(=>)。
    • 静态using声明。
  • Unity 支持:Unity 2018.1 开始实验性支持,2018.3 后默认启用。

C# 7.0(Unity 2018.3+ 部分支持)
  • 特性
    • 元组和析构((int x, int y))。
    • 模式匹配(is表达式)。
    • out变量直接声明(TryParse(input, out var result))。
  • Unity 支持:Unity 2018.3 后部分支持,需使用.NET 4.x运行时。

C# 7.3(Unity 2019.2+ 默认支持)
  • 特性
    • 改进的泛型约束。
    • ==!=支持元组比较。
    • fixed字段无需初始化。
  • Unity 支持:Unity 2019.2 后默认支持,需选择.NET 4.x运行时。

C# 8.0(Unity 2020.1+ 部分支持)
  • 特性
    • 可为空引用类型(需手动启用)。
    • 异步流(IAsyncEnumerable)。
    • 范围和索引(^..)。
    • switch表达式。
  • Unity 支持:Unity 2020.1 开始部分支持,需使用.NET Core 3.x.NET 5(实验性)。

C# 9.0(Unity 2021.2+ 部分支持)
  • 特性
    • 记录类型(record)。
    • 顶级语句。
    • 模式匹配增强。
  • Unity 支持:Unity 2021.2 开始部分支持,需使用.NET 5或更高版本(实验性)。

C# 10.0(Unity 2022.2+ 实验性支持)
  • 特性
    • 全局using指令。
    • 文件范围的命名空间。
    • 记录结构(record struct)。
  • Unity 支持:Unity 2022.2 开始实验性支持,需使用.NET 6

配置 Unity 使用更高版本 C#

  1. 修改 API 兼容级别
    Project Settings > Player > Configuration > Api Compatibility Level选择.NET 4.x.NET Standard 2.1

  2. 启用实验性功能
    在 Unity 2020+ 中,可通过Project Settings > Player > Configuration > Scripting Runtime Version选择.NET Core.NET 5+

  3. 手动编辑项目文件
    编辑.csproj文件,添加<LangVersion>latest</LangVersion>以启用最新语言特性(需编译器支持)。


注意事项

  • Unity 对 C# 新特性的支持通常滞后于官方发布。
  • IL2CPP 可能不支持某些反射或动态特性。
  • 生产环境中建议测试特性兼容性,尤其是跨平台项目。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 6:06:34

如何通过提示词工程让AI输出更自然:从原理到实战的完整指南

1. 项目概述&#xff1a;一个“说人话”的AI工具 最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“shuorenhua”&#xff0c;直译过来就是“说人话”。光看这个名字&#xff0c;你大概就能猜到它的核心诉求是什么了。没错&#xff0c;这个项目瞄准的&#xff0c;正是当前…

作者头像 李华
网站建设 2026/5/5 6:04:39

别再乱用uni.navigateTo了!uni-app五种路由跳转API的实战避坑指南

uni-app路由跳转深度解析&#xff1a;从原理到电商场景实战 在uni-app开发中&#xff0c;路由跳转看似简单&#xff0c;实则暗藏玄机。很多开发者习惯性地使用uni.navigateTo解决所有跳转需求&#xff0c;直到遇到页面栈溢出、TabBar无法切换或返回逻辑混乱时&#xff0c;才意识…

作者头像 李华
网站建设 2026/5/5 5:53:33

专业的定制软件开发公司解决方案商

最近几年&#xff0c;“数字化转型”成了每个企业绕不开的课题。但一提到定制软件&#xff0c;很多老板就头疼&#xff1a;预算超了、工期延了、做出来的东西根本不是自己想要的……这几乎是行业的通病&#xff0c;难道就没有一家能把这事儿干明白的公司吗&#xff1f;还真不一…

作者头像 李华
网站建设 2026/5/5 5:51:31

RISC-V处理器验证入门:手把手教你用riscv-tests和TinyEMU搭建简易测试环境

RISC-V处理器验证实战&#xff1a;从零构建自动化测试框架 在芯片设计领域&#xff0c;验证工作往往占据整个开发周期的70%以上。对于RISC-V这样的开源指令集架构&#xff0c;如何快速搭建高效可靠的验证环境&#xff0c;成为每个处理器开发团队必须面对的首要挑战。本文将带你…

作者头像 李华