序言

自从2000年初期发布以来,c#编程语言不断的得到改进,使我们能够更加清晰的编写代码,也更加容易维护我们的代码,增强的功能已经从1.0搞到啦7.0甚至7.1,每一次改过都伴随着.NET Framework库的相应支持,也不断的带给我们期待与惊喜。下面我们就对c#一路走到现在,做一个回顾与学习。

C#语言目标与前行

c#的设计目标是有以下几点:

  • 旨在是一种简单,现代,通用的面向对象编程语言。

  • 语言及其实现应该为软件工程原理提供支持,例如强类型检查,数组维度检查,未初始化的变量引用检测以及自动垃圾收集。软件的鲁棒性,耐久性和程序员的生产力很重要。

  • 旨在用于开发适用于分布式环境中部署的软件组件。

  • 便携性对于源代码和程序员非常重要,特别是已经熟悉C和C ++的程序员。

  • 支持国际化是非常重要的。

  • C#适用于为托管和嵌入式系统编写应用程序,从使用复杂的操作系统到非常小的专用功能都非常适用。

  • 虽然C#应用程序在内存和处理能力要求方面是经济的,但是该语言并不打算直接用C或汇编语言直接与性能和尺寸进行竞争。

c#版本

c#版本中添加的功能:

C#2.0

  • 泛型

  • 部分类型

  • 匿名方法

  • 迭代器

  • 可空类型

  • Getter / setter单独可访问性

  • 方法组转换(代表)

  • Co- and Contra-variance for delegates

  • 静态类

  • Delegate inference

C#3.0

  • 隐式类型局部变量

  • 对象和收集初始化器

  • 自动实现的属性

  • 匿名类型

  • 扩展方法

  • 查询表达式

  • Lambda表达式

  • 表达树

  • 部分方法

C#4.0

  • 动态绑定

  • 命名和可选参数

  • Generic co- and contravariance

  • 嵌入式互操作类型(“NoPIA”)

C#5.0

  • 异步方法

  • Caller info attributes

C#6.0

  • Compiler-as-a-service(Roslyn)

  • 将静态类型成员导入命名空间

  • 异常过滤器

  • 在Catch和Finally中使用Await

  • 自动属性初始化器

  • 只读属性的默认值

  • Expression-bodied members

  • Null-conditional operators(空条件运算符,简洁检查)

  • 字符串插值

  • nameof operator

  • 字典初始化器

C#7.0

  • out变量

  • 模式匹配

  • 元组

  • 解构

  • 局部函数

  • 数字分隔符

  • 二进制文字

  • 局部引用和引用返回

  • 扩展异步返回类型

  • 表达式的构造函数和finalizers

  • Expression bodied getters and setters

  • throw表达式

C#7.1

  • Async main

  • 默认表达式

参考文档:https://en.wikipedia.org/wiki/C_Sharp_(programming_language)#cite_note-roslyn_6-47

c#7.0新特性详解

在2016年Visual Studio “15” Preview 4发布,c# 7.0便开始浮现,现在vs2017已经发布,c#7.0带给我们的惊喜,我们也该一探究竟啦。

C#7.0增加许多新功能,重点是数据,代码简化和性能上。

Out variables

目前在C#中,使用out参数不像我们想要的那么流畅。在使用out参数调用一个方法之前,首先必须声明变量来传递给它。您也不能使用var它们来声明它们,但需要指定完整的类型。

public void PrintCoordinates(Point p)
{int x, y; //必须声明p.GetCoordinates(out x, out y);WriteLine($"({x}, {y})");
}

在c#7中再来看看

public void PrintCoordinates(Point p)
{p.GetCoordinates(out int x, out int y);WriteLine($"({x}, {y})");
}

模式匹配

c#7中

public static void PrintStars(object o)
{if (o is int i)       Console.WriteLine(i + 12);
}

以前版本需要转化

public static void PrintStars(object o)
{if (o is int) Console.WriteLine(Convert.ToInt32(o) + 12);
}

Switch statements with patterns 扩展switch语句使用模式匹配

public static void PrintStars(object o)

{

switch (o)

{

case Print p:

break;

case int a:

break;

case String b when b=="123":

break;

}

}

}

public class Print

{

public string PrintName { get; set; }

public string MoBanPath { get; set; }

public int Count { get; set; }

}

元组(Tuples)

注意:元组依赖于一组基础类型,不包括在预览4中。要使功能正常工作,您可以通过NuGet轻松获取它们:

  • 右键单击解决方案资源管理器中的项目,然后选择“管理NuGet软件包...”

  • 选择“浏览”选项卡,选中“包含预发行”,然后选择“nuget.org”作为“包源”

  • 搜索“System.ValueTuple”并安装它。

static void Main(string[] args)

{

var tuple = (a: 10, b: "123");

Console.WriteLine($"a:{tuple.a},b:{tuple.b}");

var result1 = GetS();

var result = Get();

Console.WriteLine($"Item1:{result1.Item1},Item2:{result1.Item2},Item3:{result1.Item3}");

Console.WriteLine($"a:{result.a},b:{result.b},c:{result.c}");

Console.ReadLine();

}

static (string, int, DateTime) GetS()

{

return ("abc", 123, DateTime.Now);

}

static (string a, int b, DateTime c) Get()

{

return (a: "abc", b: 123, c: DateTime.Now);

}

部函数

简单的说,就是在方法里面写方法然后自己调用。

static void Main(string[] args){Console.WriteLine($"{Get(123)},{Get("abc")},{Get(null)}");Console.ReadLine();}public static string Get(object a){           return GetP();string GetP(){if (a is int v) return v + "";if (a is string b) return b;return "ccc";}}

Literal improvements

C#7.0允许在数字文字中_作为数字分隔符出现:

var d = 123_456;
var x = 0xAB_CD_EF;

你可以把它们放在数字之间,以提高可读性。它们对价值没有影响。

另外,C#7.0引入了二进制文字,因此您可以直接指定位模式,而不必以心脏知道十六进制符号。

var b = 0b1010_1011_1100_1101_1110_1111;

更多c#7.0的特性

到此,我就不在一个个的上演c#7.0的其他功能啦。如果你想深入其他,仔细阅读下面的文档:

请参考文档:https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/

c#6.0新语言功能详解

以下新功能在VS 2015及17中实现并可用。

ADD:新增,Exists:已存在,N/A:对该语言没有意义,No:不适用此版本。

下面我简述几个新功能,剩下的我会把文档连接拿出来自己观摩。

字符串插值

上面的代码中都有体现。

var s = $"{p.Name} is {p.Age} year{{s}} old";

字典索引初始化

var numbers = new Dictionary<int, string> {[7] = "seven",[9] = "nine",[13] = "thirteen"
};

自动属性初始化

public class Customer
{public string First { get; set; } = "Jane";public string Last { get; set; } = "Doe";
}

using引用静态类

using static System.Console;
using static System.Math;
using static System.DayOfWeek;
class Program
{static void Main(){WriteLine(Sqrt(3*3 + 4*4)); WriteLine(Friday - Monday); }
}

更多c#6.0语言新特性

线上代码可执行演示文档连接:http://www.volatileread.com/Wiki/Index?id=1075 效果如下

参考文档:https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23-6

c#2.0-5.0参考文档

c#5.0参考文档

连接地址:https://blogs.msdn.microsoft.com/mvpawardprogram/2012/03/26/an-introduction-to-new-features-in-c-5-0/

c#4.0参考文档

连接地址:https://msdn.microsoft.com/en-us/magazine/ff796223.aspx

c#3.0参考文档

连接地址:https://msdn.microsoft.com/en-us/library/bb308966.aspx

c#2.0参考文档

连接地址:https://msdn.microsoft.com/en-us/library/7cz8t42e(v=vs.80).aspx

原文地址:http://www.cnblogs.com/knowledgesea/p/6694979.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

C#各个版本中的新增特性详解相关推荐

  1. android8.0的蓝牙版本,android o 新特性详解 安卓8.0蓝牙音频增强以及更加可爱的表情包...

    android 8.0什么时候推出?有哪些新特色?很多安卓用户非常想知道答案吧!不用着急,下面是大麦子小编整理出来的安卓8.0新特性详解,希望可以帮到大家. 有媒体近日曝光了有关谷歌Pixel XL ...

  2. PHP 7.0新增特性详解

    https://www.cnblogs.com/riverdubu/archive/2017/03/22/6434705.html 开始介绍PHP7.0新特性,具体的可以参照官网的介绍,我来挑一些给大 ...

  3. Java—Java 8 新增特性详解(Predicate和Stream)

    Predicate接口 Predicate接口介绍   Predicate是函数式接口,可以使用Lambda表达式作为参数.Java 8为集合Collection新增了removeIf(Predica ...

  4. oracle dataguard详解,Oracle 19c 新特性详解:DataGuard 中ADG的自动DML重定向

    Oracle 19c 新特性详解:DataGuard 中ADG的自动DML重定向 在前面的文章<Oracle 19c 十大新特性一览>中,我们曾经提到 Oracle 19c的一个重要增强, ...

  5. .Net 6.0中的新增特性_.Net 6.0中的新增功能

    .Net 6.0中的新增特性_.Net 6.0中的新增功能 一..Net 6 介绍 .NET 6 作为 LTS 长期支持版本,.NET 6 将会获得 3 年的技术支持. .NET 6 是首个原生支持 ...

  6. iOS 各版本中的新特性(What's New in iOS)- 目录翻译完成

    iOS 各版本中的新特性(What's New in iOS) 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致&q ...

  7. html内联元素和块元素的特性,HTML中块级元素和内联元素的特性详解

    原标题:HTML中块级元素和内联元素的特性详解 在网站布局中经常会遇到元素进行居中的时候,设置了text-align:center:margin:0 auto;有时候会起作用,但有时候对居中无效,刚接 ...

  8. 还在用JDK6的同学,来看看JDK13新特性详解吧

    点击上方"搜云库技术团队"关注,选择"设为星标" 回复"面试题"或"1024"获取 4T 学习资料 在 JDK 版本的世 ...

  9. java11 新特性 详解

    为什么80%的码农都做不了架构师?>>>    引言: 点击-->java10 新特性 详解 点击-->java9 新特性 详解 点击-->java8 新特性 详解 ...

最新文章

  1. 2型文法:基于预测分析表的自顶向下语法分析
  2. C# == 和equals()区别
  3. python作品阐述_Python网络编程基础的作品鉴赏-
  4. [css] 当页面采用rem布局时,如何解决用户设置字体大小造成的页面布局错位?
  5. 【转】DCMTK开源库的学习笔记3:dcmtk文件中数据元的修改
  6. python scrapy框架 简书_python爬虫框架——Scrapy架构原理介绍
  7. InformaticaPowerCenter调用存储过程
  8. 安卓数据读写全解:SharedPreferences公共数据的读写,SQLiteDatabase数据库,mysql数据库
  9. carry函数在C语言中用法,CArry的使用完整版.doc
  10. 问题三十九:怎么用ray tracing画圆环
  11. 面向对象(Python):学习笔记之私有属性和私有方法
  12. C++ 代码整洁之道
  13. Activity 过渡动画 — 让切换更加炫酷
  14. 抽头延时信道模型matlab,频率选择性衰落信道模型研究与仿真.docx
  15. 【HTTP协议】---HTTP协议详解
  16. uni-App打包ios后白屏
  17. 下载Macromedia FLASHPAPER
  18. eclipse导入系统签名
  19. 共享办公平台,提高整体使用率
  20. 抖音APP终极瘦身方案

热门文章

  1. 《版式设计——日本平面设计师参考手册》—第1章应用对象样式
  2. 创建第一个WCF程序
  3. 关于虚拟机下linux共享Windows文件的解决方案
  4. Nemuria UML架构图 第3次迭代. 重构
  5. WPF 不遮挡任务栏最大化和全屏显示
  6. 迎接.NET 6,《dotnet+Linux中文手册》完整PDF开放下载!
  7. Dapr牵手.NET学习笔记:状态管理进阶(一)
  8. 《.NET内存管理宝典》在京东上架销售啦!
  9. RabbitMQ 入门:1. Message Broker(消息代理)
  10. 微软发布 Microsoft Edge 85 稳定版