• C# 6 与 .NET Core 1.0 高级编程


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

    英文原文: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章“对象和类型”中讨论 

    表达式属性 

    类似表达式方法, 

    单行属性只有一个getaccessor ,可以用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 空指针传递运算符可以简化空指针检查: 

    C# 5 

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

     C# 6 

    int? age = p?.Age;

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

    在 C# 5 

    var handler = Event;
    if (handler != null)
    {
      handler(source, e);
    }

     在 C# 6 

    handler?.Invoke(source,e);

     空指针传递运算符将在第8章中讨论。 

    字符串插值 

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

    在 C# 5 

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

     在 C# 6 

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

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

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

    字符串插值将在第10章“字符串和正则表达式”讨论

     

    字典初始化程序 

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

    在 C# 5 

    var dict = newDictionary<int, string>();
    dict.Add(3,"three");
    dict.Add(7,"seven");

     在C# 6

    var dict = newDictionary<int, string>()
    {
      [3] ="three",
      [7] ="seven"
    };

     字典预设器将在第11章提 “集合”中讨论。 

    异常过滤器

    异常筛选器允许在捕获异常之前对其进行过滤。 

    在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需要在外层的代码块中才能使用。 

    在 C# 5 

    bool hasError = false;
    string errorMessage =null;
    try
    {
    //etc. } catch (MyException ex) { hasError = true; errorMessage = ex.Message; } if (hasError) { await newMessageDialog().ShowAsync(errorMessage); }

     在 C# 6 

    try
    {
      //etc.
    }
    catch (MyException ex)
    {
      await newMessageDialog().ShowAsync(ex.Message);
    } 

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

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

  • 相关阅读:
    事务/数据库操作之事务,开启回滚提交
    python连接数据库、cursor fetch语句处理
    order by 排序输出、插入
    表的查询,
    android权限大全
    uniapp ios端证书打包+开发环境
    uniapp在app端白屏报错
    数字递增动画js插件-countUp.js
    窗口滚动时,判断元素与视野的关系-js代码
    Linux安装Nginx并配置站点
  • 原文地址:https://www.cnblogs.com/EasyInvoice/p/6368022.html
Copyright © 2020-2023  润新知