• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > 三十分钟快速掌握C# 6.0知识点

三十分钟快速掌握C# 6.0知识点

作者:雨夜潇湘 字体:[增加 减小] 来源:互联网 时间:2017-05-28

雨夜潇湘 通过本文主要向大家介绍了一分钟掌握超级催眠术,一分钟教你掌握灭火器,10分钟掌握2000年历史,一分钟掌握轻度sm技巧,快速掌握excel等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

一、只读自动属性(Read-only auto-properties)

 C# 6之前我们构建只读自动属性:

 public string FirstName { get; private set; }
 public string LastName { get; private set; }
</div>

原理解析:就是编译器在生成set访问器时,它的修饰符是private,由上可知所谓的只读只是针对类外部,在类内部还是可以随意修改属性值的。

C# 6中提供了真正的只读自动属性,写法如下:

 public string FirstName { get; }
 public string LastName { get; }
</div>

原理解析:首先编译器会生成一个readonly的私有字段而get访问器就是返回该字段的值,由上可知该只读自动属性只能在构造函数中为其赋值。

二、自动属性初始化器(Auto-Property Initializers)

以前自动属性的赋值操作我们只能写在方法中,如构造函数:

 public Student(string firstName, string lastName)
 {
 FirstName = firstName;
 LastName = lastName;
 }
</div>

但在C# 6中我们可以把赋值操作当作声明的一部份,如下所示:

 public string FirstName { get; set; } = "Corleone";
 public string LastName { get; set; } = "Mike";
</div>

备注:其实C# 6和之前的版本都一样赋值操作最终都是在方法中完成,但后者明显更简洁直观,所以这是个不错的语法糖。

三、函数成员的表达式体(Expression-bodied function members)

C# 6中提供的一个新语法:对于只有一条语句的方法体可以简写成表达式。如下面两种情况:

1. 方法(Methods)

 public Student Create() => new Student();
</div>

 

等同于:

 public Student Create()
 {
  return new Student();
 }
</div>

2. 只读属性(read only properties)

 public string FullName => string.Format("{0},{1}", FirstName, LastName);
</div>

等同于:

public string FullName
 {
  get
  {
   return string.Format("{0},{1}", FirstName, LastName);
  }
 }
</div>

原理解析:上面的表达式在编译后会生成最原始的方法体和访问器,值得一提的是函数表达式体跟Lambda是两个相似但不相同的东西,函数的表

达式体只能带一句话且不能包含return关键字但Lambda 能带语句块和包含关键字。

四、使用静态(using static)

C# 6中的一个新语法:使用类型的静态成员时可以省略其类型,如下所示:

 using static System.String;  // 先导入对应成员类型
 public bool IsNull(string str) => IsNullOrEmpty(str); 
</div>

等同于:

 public bool IsNull(string str) => string.IsNullOrEmpty(str);
</div>

总结:该语法糖的目的是使代码变得更简洁,但这个应该是区分使用场景的,如:数学计算(Math类)使用此语法糖的确能够简洁代码提高可读

性,但在某处如果导入过多的类型那么不仅不能提高阅读性反而会增加阅读难度,因为你不知道这些成员具体属于那个类型。还有若类型本身存在同名成员使用时则会使用类型成员覆盖。

注意:使用静态这一语法糖并不适用扩展方法,因为扩展方法的设计理念就是不修改已有代码且只能在一定范围内使用,所以在特殊情况下需要将

其当作静态方法来使用,那么使用类名调用反而是比较明智的。

五、Null条件运算符(Null-conditional operators)

稍有经验的童鞋都知道在Coding过程中经常要判断变量的值是否为null,类似这种if-else的操作还不少。这使得代码看起来十分不简洁,好在C#6中提供了解决方法:

 var student = new Student();
 var firstName = student?.FirstName;
</div>

等同于:

var student = new Student();

 string firstName = null;
 if (student != null)
 {
  firstName = student.FirstName;
 }
</div>

使用方法:只需替换成员访问符 . 为 ?. ,若 ?. 左边为null则整个运算符的结果也为null,否则运算符的结果就等于其成员值。假如成员的类型为值

类型则整个表达式返回的类型是对应类型的可空类型,如:

 int? age = student?.Age;
</div>

原理解析: ?. 编译后就是 if 或 三元运算符,非赋值操作(如:call)会编译成 if,赋值操作一般会编译成三元运算符。

六、字符串插值(String Interpolation)

C# 6中提供了一种新语法来构建格式化字符串,如:

 var fullName = $"{student.FirstName},{student.LastName}";
</div>

等同于:

 var fullName = string.Format("{0},{1}", student.FirstName, student.LastName);
</div>

使用方法:只需在字符串前加上$符号,然后在大括号中填写表达式(字段、方法、Lambdad...)即可。

备注:

1. 字符串插值语法支持以前所有字符串格式设置,如:

 Console.WriteLine($"平均成绩:{student.GPA:F2}");
</div>

注:因为 : 总被编译器解释为表达式与字符串格式的分隔符,所以表达式中若有条件运算符则我们需要用括号来强制编译将其解析成当前语境所要

表达的意义。如:

 Console.WriteLine($"平均成绩:{(student.GPA > 80 ? student.GPA : 0):F2}");
</div>

2. 字符串插值语法可以嵌套,如:

 var score = $"我的各科成绩:{ $"数学:{student.MathScores};英语:{student.EnglishScore};"}";
</div>

原理解析:$"xxx{expression1}xxx{expression2}..." 编译后就是string.Format()。

七、异常过滤器(Exception Filters)

C# 6中的一个新功能就是异常过滤器,它可以使我们在恰当的时机来应用Catch子句,如:

try
 {
  throw new WebException("Request timed out..", WebExceptionStatus.Timeout);
 }
 catch (WebException webEx) when (webEx.Status == WebExceptionStatus.Timeout)
 {
  // Exception handling
 }
</div>

使用方法:try-catch() when()。

总结:异常过滤器最大的亮点就是在使用恰当的情况下可以不丢失异常引发点的堆栈信息,这对程序的排错至关重要。另外它还有很多有意思的用法,大家可以上网查下。

八、nameof表达式(nameof Expressions)

nameof 表达式的功能是获取成员名称,如抛异常:

public string FullName(Student student)
 {
  if (studen



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 三十分钟快速掌握C# 6.0知识点

相关文章

  • 2017-05-28C#文件目录操作方法汇总
  • 2017-05-28C# 透明窗体制作实现方法比较分析
  • 2017-05-28C#中正则表达式的3种匹配模式
  • 2017-05-28c#泛型序列化对象为字节数组的示例
  • 2017-05-28C#字符串的常用操作工具类代码分享
  • 2017-05-28C#中abstract的用法详解
  • 2017-05-28C#发送邮箱实现代码
  • 2017-05-28C#创建压缩文件的实现代码
  • 2017-05-28c#中Linq to Sql 增删除的实例
  • 2017-05-28C#文件和字节流的转换方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#(asp.net)多线程用法示例(可用于同时处理多个任务)
    • C#实现字体旋转的方法
    • c#的异或运算符介绍
    • C#中缓存的基本用法总结
    • c#反射机制学习和利用反射获取类型信息
    • c#实现万年历示例分享 万年历农历查询
    • winform中的ListBox和ComboBox绑定数据用法实例
    • 使用C#实现阿拉伯数字到大写中文的转换
    • C#中DropDownList动态生成的方法
    • C# 中GUID生成格式的四种方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有