个人原创译文,转载请注明出处。有不对的地方欢迎指出与交流。

英文原文:Professional C# 6 and .NET Core 1.0 - What’s New in C# 6

C# 6 改进

新的C #编译器可以编译C # 6 。这个新的编译器不仅是已完成代码清理;编译器流水线的特征也可以在自定义程序中使用,这些特征同时也应用在的Visual Studio的功能里。

新的编译平台可以提高C #许多新特征.虽然没有类似LINQ或异步特征关键字的影响力,但许多增强的功能确实提高了开发者生产力。C # 6的变化都有哪些?

静态引

静态引用声明允许没有静态方法类名的调用:

C# 5:

using System;

// etc.

Console.WriteLine("Hello,World!");

C# 6

using static System.Console;

// etc.

WriteLine("Hello,World");

using static关键字将会在第2章提到,“Core C #.”

表达式方法

使用表达式方法时,可以用只包含一个语句的lambda表达式语法:

C# 5

public boolIsSquare(Rectangle rect)

{

return rect.Height == rect.Width;

}

C# 6

public boolIsSquare(Rectangle rect) => rect.Height == rect.Width;

表达式方法将在第3章提到, 关键字“Objects and Types.”

表达式属性

类似表达式方法, get 属性访问器仅一行lambda语法就可以完成:

In C# 5

public string FullName

{

get

{

return FirstName +"" + LastName;

}

}

In C# 6

public string FullName=> FirstName +"" + LastName;

表达式属性将在第3章提到.

自动实现的属性设定项

自动实现的属性可以通过属性设定项进行初始化:

In C# 5

public class Person

{

public Person()

{

Age = 24;

}

public int Age {get; set;}

}

In C# 6

public class Person

{

  public int Age {get; set;} = 42;

}

自动初始化的属性设定项将在第3章提到。

只读自动属性

实现只读属性,C # 5中要求全属性语法。但在C # 6,您可以使用自动实现的属性:

C# 5

private readonly int_bookId;

public BookId

{

get

{

return _bookId;

}

}

C# 6

public BookId {get;}

只读自动属性将在第3章提到。

nameof 运算符

利用新的nameof 运算符,字段名称、属性、方法或类型均可被访问。这样即使重构也不必考虑遗漏名称更改的问题:

C# 5

public void Method(objecto)

{

if (o == null) throw newArgumentNullException("o");

C# 6

public void Method(objecto)

{

if (o == null) throw newArgumentNullException(nameof(o));

nameof 运算符将在第 8章提到,关键字 “Operators and Casts.”

Null 空指针传递运算符

null 空指针传递运算符可以简化空指针检查:

C# 5

int? age = p == null ?null : p.Age;

C# 6

int? age = p?.Age;

新的语法在触发事件中也有优势:

In C# 5

var handler = Event;

if (handler != null)

{

handler(source, e);

}

In C# 6

handler?.Invoke(source,e);

空指针传递运算符将在第8章中提到。

字符串插值

字符串插值消除调用string.Format。占位参数可以包含在表达式中则不必在string里利用数字占位进行格式化:

In C# 5

public override ToString()

{

return string.Format("{0}, {1}",Title, Publisher);

}

In C# 6

public override ToString()=> $"{Title} {Publisher}";

以上C # 6的示例比C # 5语法简化太多,因为它不仅使用字符串插值,而且使用了表达式方法。

字符串插值也可以使用字符串格式,并在分配可格式化的字符串时有特殊的功能。

字符串插值将在第10章担任,关键字“字符串和正则表达式。”

字典预设器

字典可以使用一个类似集合预设器的字典预设器进行初始化。

In C# 5

var dict = newDictionary<int, string>();

dict.Add(3,"three");

dict.Add(7,"seven");

In C# 6

var dict = newDictionary<int, string>()

{

[3] ="three",

[7] ="seven"

};

字典预设器将在第11章提到,关键字 “Collections.”

异常过滤器

异常筛选器允许在捕获异常之前筛选异常。

In C# 5

try

{

//etc.

}

catch (MyException ex)

{

if (ex.ErrorCode != 405) throw;

// etc.

}

In C# 6

try

{

//etc.

}

catch (MyException ex)when (ex.ErrorCode == 405)

{

// etc.

}

新语法的优势不仅在于它减少了代码长度,同时堆栈跟踪是不可改变的,这在C # 5中可能发生变化。
在第14章中,“错误和异常”覆盖了异常过滤器。

等待捕捉

可以在catch子句中使用关键字await。而在C # 5需要在外层的代码块中才能使用。

In C# 5

bool hasError = false;

string errorMessage =null;

try

{

//etc.

}

catch (MyException ex)

{

hasError = true;

errorMessage = ex.Message;

}

if (hasError)

{

await newMessageDialog().ShowAsync(errorMessage);

}

In C# 6

try

{

//etc.

}

catch (MyException ex)

{

await newMessageDialog().ShowAsync(ex.Message);

}

此特征不需要C #语法增强;这个功能目前是可用的。这种增强需要微软大量的投资来使它的工作,但与你使用这个平台没有关系。从两个版本的对比可以看出对于开发者来说,代码会越来越少。

 请注意新的C # 6语言特点都包含在上述提到的章节,但本书所有章节都会使用新的C #语法。

C# 6 与 .NET Core 1.0 高级编程 - C# 6 改进的更多相关文章

  1. C# 6 与 .NET Core 1.0 高级编程 - 37 章 ADO.NET

    译文,个人原创,转载请注明出处,有不对的地方欢迎指出与交流. 英文原文:Professional C# 6 and .NET Core 1.0 - 37 ADO.NET --------------- ...

  2. C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(上)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(上)),不对的地方欢迎指出与交流. 章节出自<Professional C# 6 ...

  3. C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(下)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(下)),不对的地方欢迎指出与交流. 章节出自<Professional C# 6 ...

  4. C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(上)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(上)),不对的地方欢迎指出与交流. 章节出自<Professional C ...

  5. C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(下)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(下)),不对的地方欢迎指出与交流. 章节出自<Professional C ...

  6. C# 6 与 .NET Core 1.0 高级编程 - 40 ASP.NET Core(上)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 40 章  ASP.NET Core(上)),不对的地方欢迎指出与交流. 章节出自<Professiona ...

  7. C# 6 与 .NET Core 1.0 高级编程 - 40 ASP.NET Core(下)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 40 章  ASP.NET Core(下)),不对的地方欢迎指出与交流. 章节出自<Professiona ...

  8. C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(上)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(上)),不对的地方欢迎指出与交流. 章节出自<Professional C# ...

  9. C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(中)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(中)),不对的地方欢迎指出与交流. 章节出自<Professional C# ...

随机推荐

  1. find 路径必须在表达式之前

    http://sukaka.blog.51cto.com/379985/906008 把*号引起来.

  2. 串口通信中ReadFile和WriteFile的超时详解!

    源:串口通信中ReadFile和WriteFile的超时详解! 在用ReadFile和WriteFile读写串行口时,需要考虑超时问题.如果在指定的时间内没有读出或写入指定数量的字符,那么ReadFi ...

  3. struts2.0 s标签_小小鸟_百度空间

    struts2.0 s标签 1. Struts2页面开发中常用标签使用说明 1.1.往action里传值的使用方式: <input name="userName" type= ...

  4. list集合怎么转化成一个javaBean对象,及常见的使用方法(全)

    一.List集合的用法 1.list集合添加实体并输出 for (int i = 0; i < list.size(); i++) { javabean obj= (javabean)list. ...

  5. Oracle物化视图的用法与总结

    物化视图(material view)是什么? 物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表. 物化视图存储基于远程表的数据,也可以称为快照(类 ...

  6. 苹果App Store开发者帐户从申请,验证,到发布应用(1)

    app store为开发者提供四种类型的申请: 个人ios开发者计划$99/年 公司ios开发者计划$99/年 企业ios开发者计划$299/年 高校ios开发者计划免费 在这里主要介绍一下公司ios ...

  7. STM32 USB 问题汇总(转)

    源:STM32 USB 问题汇总 汇总1:STM32的USB例程修改步骤,来自http://blog.csdn.net/cy757/archive/2010/01/01/5117610.aspx 以下 ...

  8. 学习tabhost 实现微博的主界面

    2014-05-27 吴文付 微博的主界面还是很漂亮的,我们这里来熟悉下tabhost的使用, 网上资料很多,主要参考了:http://blog.csdn.net/shulianghan/articl ...

  9. PHP+AJAX 地区三级联动代码

    <html><head><meta http-equiv="Content-Type" content="text/html; charse ...

  10. dubbo框架揭秘之服务发布

    通常情况下是通过Spring配置的方式去实现服务的发布,为了方便调试,我就不采用Spring配置的方式. DemoService demo = new DemoServiceImpl(); Appli ...