博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 语言特性发展史
阅读量:4693 次
发布时间:2019-06-09

本文共 3177 字,大约阅读时间需要 10 分钟。

C# 语言特性发展史

Intro

本文主要总结介绍C# 每个版本带来的不同的语言特性。

C#,读作C Sharp,是微软推出的一种基于.NET平台的、面向对象的高级编程语言。是微软公司在2000年发布的一种新的编程语言,主要由安德斯·海尔斯伯格(Anders Hejlsberg)主持开发,它是第一个面向组件的编程语言,其源码会编译成msil再运行。它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,并且新增了许多功能及语法糖。

C# 1.x

自 2000 年 C#1.0 发布之后,微软在2003年4月又发布了 C# 1.1 主要是修复BUG,这里统称为1.x

  • 面向对象
  • 内存自动回收,GC
  • 属性
  • 反射

C# 2

  • 泛型
  • 分部类
  • 静态类型
  • 迭代器(yield return)
  • 匿名方法(lambda 表达式)
  • 可空类型
  • 委托的协变逆变
  • 属性访问器可以被单独设置访问级别
  • ??表达式

C# 3

  • Linq
  • 类型初始化器
  • 集合初始化器
  • 匿名类型
  • 局部变量类型推断(var)
  • Lambda 表达式
  • 自动属性
  • 扩展方法
  • 分部方法
  • 表达式树(Expression Tree)

C# 4

  • 动态编程(dynamic
  • 具名参数与可选参数
  • 泛型的协变和逆变
  • TPL任务并行库,基于Task的异步编程

C# 5

  • 异步编程(async&await)
  • 调用方信息特性(CallerMemberName&CallerFilePath&CallerLineNumber)

C# 6

  • 静态导入(using static
  • 异常过滤器(when(ex.ExceptionCode == 111)
  • 属性初始化器(public int PageIndex {get;} = 1;
  • 字典初始化器

    private Dictionary
    webErrors = new Dictionary
    { [404] = "Page not Found", [302] = "Page moved, but left a forwarding address.", [500] = "The web server can't come out to play today."};
  • 字符串插值($"abc{123}def"
  • nameof 运算符
  • null判断传播运算符(a?SomeProperty?.Abc??"abcd"
  • 表达式体方法(int Add(int a,int b) => a+b;
  • catch和finally子句中支持 await
  • 只读自动属性(public int Count {get;}

C# 7

  • out 变量(int.TryParse("123", out var num);
  • 优化元祖支持,支持变量名((int max,int min) top = (3,1);
  • 废弃变量(if(int.TryParse("123",out _))
  • 模式匹配(if(abc is int num)switch...case支持模式匹配)
  • ref local and ref return(ref return 123;
  • 本地方法(局部方法)
  • 更多的支持表达式体方法(增加支持属性和索引器上实现构造函数、终结器以及 get 和 set 访问器)
  • throw表达式
  • 数字文本语法改进

    误读的数值常量可能使第一次阅读代码时更难理解。 当这些数字被用作位掩码或其他符号而非数字值时,通常会发生这种情况。 C# 7.0 包括两项新功能,使得更容易以最可读的方式写入数字来用于预期用途:二进制文本和数字分隔符

    public const int Sixteen =   0b0001_0000;public const int ThirtyTwo = 0b0010_0000;public const int SixtyFour = 0b0100_0000;public const int OneHundredTwentyEight = 0b1000_0000;public const long BillionsAndBillions = 100_000_000_000;public const double AvogadroConstant = 6.022_140_857_747_474e23;public const decimal GoldenRatio = 1.618_033_988_749_894_848_204_586_834_365_638_117_720_309_179M;

C# 7.1

  • 异步Main方法(async Main()
  • 默认常值表达式(Func<string, bool> whereClause = default;
  • 推断元组元素名称

    // C# 7int count = 5;string label = "Colors used in the map";var pair = (count: count, label: label);// C# 7.1int count = 5;string label = "Colors used in the map";var pair = (count, label); // element names are "count" and "label"

C# 7.2

  • 语言版本选择(支持在项目中指定要使用的C#版本)
  • 数值文字中的前导下划线

    C# 7.0 中实现了对数字分隔符的支持,但这不允许文字值的第一个字符是 _。 十六进制文本和二进制文件现可以 _ 开头。

    int binaryValue = 0b_0101_0101;
  • private protected 访问修饰符(可通过包含同一程序集中声明的类或派生类来访问成员)

C# 7.3(Preview)

  • 元组支持相等性比较
  • 新的泛型约束(Enum,Delegate,unmanaged)
  • Ref 局部变量重新分配(Ref 局部变量和 ref 参数现在可通过 ref 分配运算符重新分配 = ref
  • Stackalloc 初始化表达式

    Span
    x = stackalloc[] { 1, 2, 3 };
  • 初始化表达式和查询中的表达式变量
  • 支持字段的特性

    允许自动实现的属性上的 [field: …] 特性定位其支持字段

    // C# 7.3[Serializable]public class Foo {  [field: NonSerialized]  public string MySecret { get; set; }}// above code equals the code below[Serializable]public class Foo {  [NonSerialized]  private string MySecret_backingField;  public string MySecret {    get { return MySecret_backingField; }    set { MySecret_backingField = value; }  }}

C# 8(Preview)

  • 可空引用类型(引用类型默认不可为空,如果需要为可空则需要显示声明string? abc = null;

Reference

转载于:https://www.cnblogs.com/weihanli/p/csharplanghistory.html

你可能感兴趣的文章
数据库---表---多表查询
查看>>
【分享】常用获取IP及地区信息API
查看>>
Spring 【引用】类型【注入】
查看>>
正则表达式 环视
查看>>
关于Tchar
查看>>
小白学习Spark系列三:RDD常用方法总结
查看>>
将jquery序列化转成对象的编码坑
查看>>
6.824 LAB1 环境搭建
查看>>
shell 脚本实战笔记(10)--spark集群脚本片段念念碎
查看>>
HDU - 3572 Task Schedule
查看>>
log4j2.xml的例子
查看>>
1004 四子连棋
查看>>
二、第一个C程序:Hello World!
查看>>
Ubuntu 编译 ARM-Linux-Gcc 工具链 -- 编译过程
查看>>
java url生成二维码保存到本地
查看>>
python platform模块
查看>>
Nginx
查看>>
leetcode133 - Clone Graph - medium
查看>>
Mybatis(一)入门
查看>>
DDR工作原理(转)
查看>>