zoukankan      html  css  js  c++  java
  • .Net 6+C#10.0正式版初体验(一)

      昨晚,.Net 6正式版发布,今天一早我就迫不及待的下载安装了VS2022,同时体验了一下C#10.0的各种新特性。关于.Net 6的性能提升和具体内部细节还没来得及仔细研究,先给大家分享一下.Net 6或者说C# 10.0带来的新特性及对我们开发过程的影响。

    1.顶级程序

      首先最直观可以看到的是当我们创建Web应用或者控制台应用的时候,我们会发现Main函数找不到了,程序编程了这个样子:

      ·   

      这其实并不是C#10.0的新特性,而是C# 9.0新特性中的“顶级程序”,只是在.Net5时使用VS默认生成的代码框架中并没有用到顶级程序的写法,而.Net 6的Web应用和控制台应用中使用了该写法。但是在.Net 6的WPF或WinForm应用默认代码中依旧维持原来的写法。

      对顶级程序用法进行研究后,我发现了以下规律:

    • 虽然.Net6中默认去掉了Main函数,我们依旧可以定义使用Main函数作为程序入口,但是仅限于不编写顶级函数的情况下,若存在顶级函数,则Main函数不会被默认执行。若已存在顶级程序,则自定义的Main函数不会被执行
    • 如果编写了顶级程序,则会默认出现Program类,而且这个类不是运行时生成的,我们在IDE中直接就可以打出来,同时,如果你额外在无命名空间的代码处定义一个Program类则会提示需要使用partail关键字。如下图所示

        

    •  顶级程序前或顶级函数中,不能声明类、接口、命名空间、record等内容。如果在同一文件中编写,则此类声明必须写在顶级程序后面。

    2.全局引用

      在C#10.0语言特性说明中,我们可以看到全局应用。为了方便大家理解和使用全局引用,我总结了以下几个特点:

    • .Net6中默认存在有一部分全局引用,其使用开关为各项目csproj文件的ImplicistUsings属性,如果该值为enable,则使用默认引用,如果值为disable则不使用默认引用,如下图:

         

    • 除默认全局引用外,我们声明自己所需要的全局引用,用法为:global using xxx; 全局引用的范围只限于其所在项目,若A项目引用B项目,B的全局引用在A中无效,同时A项目的全局引用在B中也无效。

    3.同一个解构中的赋值和声明

      额,,,C#10.0官方文档是这么写的,但是析构是什么东西,从文档上看明显不是析构函数,翻找资料后,发现其实这个特性针对的是tuple(元组),这东西在C#7.0中就已经出现,但是一直很少被用到,官方说法是主要应对一些需要多个输入或输出的算法。那么我们还是来看一下C#10.0在这一块更新了什么。

      官方文档中对此项更新的写法是这样:

        

      如果大家对元组不熟悉,会搞不清楚point是什么,怎么写。实际我们写出完整的例子应该是这样的

     1 var point = (1, 2);
     2 
     3 int x1 = 0;
     4 int y1 = 0;
     5 (x1, y1) = point;
     6 
     7 int x2, int y2) = point;
     8 
     9 int x3 = 0;
    10 (x3, int y3) = point;

      其中第3至5行和第7行的两种写法,从C#7.0到现在一直是可用的,但是第9至10行这种写法,在C#9.0及之前版本是不支持的,10.0之后,加入了对该写法的支持。

      .Net6及C#10.0带来的新特性非常多,今天先写到这里,后面的特性解读我会尽快编写完成。

  • 相关阅读:
    WQS二分
    题解 洛谷 P4696 【[CEOI2011]Matching】
    原根
    单位根反演
    题解 洛谷 P4218 【[CTSC2010]珠宝商】
    题解 洛谷 P5434 【有标号荒漠计数】
    题解 洛谷 P5406 【[THUPC2019]找树】
    题解 洛谷 P3563 【[POI2013]POL-Polarization】
    题解 洛谷 P6078 【[CEOI2004]糖果】
    拉格朗日插值法
  • 原文地址:https://www.cnblogs.com/zklight/p/15529383.html
Copyright © 2011-2022 走看看