当前位置: 首页 > news >正文

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 可能不支持某些反射或动态特性。
  • 生产环境中建议测试特性兼容性,尤其是跨平台项目。
http://www.jsqmd.com/news/755444/

相关文章:

  • citrix node controller与kubernetes cni集成实现overlay
  • 利用快马平台与okztwo框架,十分钟搭建可运行web应用原型
  • 别再手动写H5跳转了!用uniapp的UrlSchemes实现App深度链接,5分钟搞定
  • 用Python从零复现APO算法:模拟原生动物觅食与繁殖的优化之旅
  • 骨骼控制技术在3D生成模型中的应用与优化
  • 构建智能体记忆系统:分层存储与结构化检索实战指南
  • 3068. 最大节点价值之和
  • 构建高效开发工具集:从环境配置到Docker部署的工程实践
  • 2942. 查找包含给定字符的单词
  • 新手入门:通过快马生成可交互代码,轻松理解exfat与ntfs核心差异
  • SD3012 磁编码器芯片新手快速上手指南
  • CrewAI的“万星”神话:是资本造假,还是真的好用?
  • Java协议解析核心源码深度剖析(Netty+Spring Boot双栈实测):JDK底层ByteBuf与ProtocolBuffer序列化链路全曝光
  • 别再只懂TMR了!聊聊Xilinx FPGA在太空里抗辐射的几种“保命”招数
  • L9110S电机驱动模块的4种电平组合全解析:别再让你的小车原地打转了
  • 新手入门Web开发:借助快马平台AI生成你的第一个免费美剧网站
  • 普通车床变速箱的三维虚拟设计及运动仿真
  • 5大核心特性深度解析:Bebas Neue字体的技术革新与实战价值
  • 为什么92%的医疗PHP系统仍在用MD5做脱敏?,一文讲透国密SM4+动态盐值的合规替代方案
  • nodejs实战:基于快马平台快速构建可部署的实时聊天室应用系统
  • 打造安全的礼物天堂:专业安全策略揭秘
  • 免费音频转换器fre:ac:终极跨平台音频处理解决方案
  • 保姆级教程:用QT Creator和C++给你的Arduino/STM32做个带串口控制的LED上位机
  • Linux服务器路径部署建议
  • 提升iic调试效率:用快马ai生成总线监控与从机模拟工具
  • 华为手机抓蓝牙包踩坑记:USB连接模式不调对,adb pull 永远拿不到btsnoop_hci.log
  • NewsMCP:基于MCP协议与AI聚类的实时新闻服务器,赋能AI智能体
  • IQ-Learn 在 RTX 3090 服务器上的环境配置与踩坑记录
  • 告别信号模糊:手把手教你理解PCIe 3.0的动态均衡(含FIR滤波器配置)
  • 避坑指南:在MATLAB里跑YOLOv5目标检测,从模型转换到界面集成的5个常见问题