最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#9.0新特性詳解——頂級(jí)程序語句(Top-Level Programs)

 更新時(shí)間:2020年12月07日 08:35:04   作者:碼客風(fēng)云  
這篇文章主要介紹了C#9.0新特性詳解——頂級(jí)程序語句(Top-Level Programs)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下

1 背景與動(dòng)機(jī)

通常,如果只想用C#在控制臺(tái)上打印一行“Hello World!”,這可不是Console.WriteLine("Hello World!");一條語句就可以搞定的,還涉及到其他必要基礎(chǔ)代碼(如定義類和入口函數(shù)Main),例如下面:

using System;
class Program
{
  static void Main()
  {
    Console.WriteLine("Hello World!");
  }
}

就打印一句“Hello World!”,就這么多代碼。這個(gè)不僅對(duì)于初學(xué)者來說麻煩,而且使得代碼凌亂,并且增加了縮進(jìn)層級(jí)。為了解決這些問題,就提出了頂級(jí)代碼語句這個(gè)新特性。

2 頂級(jí)語句

2.1 介紹

在C#9.0中,將Class的定義和主函數(shù)Main的聲明省略掉,只寫出你的核心業(yè)務(wù)代碼,就成了頂級(jí)語句。上面這段代碼,我們可以用頂級(jí)語句寫為:

using System;

Console.WriteLine("Hello World!");

這樣,代碼簡潔清晰了很多,易于初學(xué)者理解。是不是有點(diǎn)寫Python的感覺?當(dāng)然,任何語句都是允許的。如果你想返回值,你可以那樣做;你想用await,也可以那樣做;如果你想訪問命令行參數(shù),args也是可用的;你想使用本地函數(shù),也是可以的。

雖然可以使用任何代碼,但是有一些規(guī)則要求必須遵守:

  • 頂級(jí)語句必須放在using語句代碼后面
  • 頂級(jí)語句必須用在任何類型或者命名空間聲明的前面
  • 頂級(jí)語句只能寫在一個(gè)源代碼文件里,像如今只能寫一個(gè)main方法一樣。
  • 頂級(jí)語句中定義的本地函數(shù)和變量,在頂級(jí)代碼段外部的任何地方調(diào)用他們都會(huì)產(chǎn)生錯(cuò)誤。

下面這段代碼就是一個(gè)比較好的示例:

using static System.Console;
using System.Threading.Tasks;

WriteLine("Hello,");
Print(args[0]);
await Task.Delay(1000);
return 0;

void Print(string arg)
{
  WriteLine(arg);
}

2.2 原理

我們知道,C#作為面向?qū)ο蟮木幊陶Z言,一切類型都是面向?qū)ο蟮模蓄愋秃统蓡T定義。頂級(jí)語句表面看著好像違反了這一規(guī)則,實(shí)際上沒有。這是因?yàn)?,頂?jí)語句最終還是在編譯的時(shí)候,被作為全局命空間中Program類的Main方法體中一段代碼一起自動(dòng)生成。如下所示:

static class Program
{
  static async Task Main(string[] args)
  {
    // 頂級(jí)語句
  }
}

需要注意的是,這里的類名Program和方法名Main只是用來舉例,其實(shí)在編譯器生成的不是這個(gè)名字。我們可以通過查看IL代碼確認(rèn)這一點(diǎn):

根據(jù)在頂級(jí)語句中是否有異步操作和返回值的情況,生成的入口函數(shù)簽名也是不同的。具體如下面表格所示:

存在返回值 不存在返回值
存在異步 async static Task<int> Main(string[] args) async static Task Main(string[] args)
不存在異步 static int Main(string[] args) static void Main(string[] args)

例如上面代碼,生成的入口函數(shù)<Main>$就如下代碼所示:

static class Program
{
  async static Task<int> Main(string[] args)
  {
    WriteLine("Hello");
    Print(args[0]);
    await Task.Delay(1000);
    return 0;

    void Print(string arg)
    {
      WriteLine(arg);
    }
  }
}

3 結(jié)束語

使用頂級(jí)語句能簡化我們的編碼工作,使代碼看起來簡潔清晰,對(duì)初學(xué)者也很友好,本質(zhì)上也未改變C#的語言的原有的語法結(jié)構(gòu),任何語句都可以使用,沒有產(chǎn)生額外的限制,從這些方面來說,是一個(gè)值得肯定的變化。

以上就是C#9.0新特性詳解——頂級(jí)程序語句(Top-Level Programs)的詳細(xì)內(nèi)容,更多關(guān)于C# 9.0新特性的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#微信公眾號(hào)開發(fā)之自定義菜單

    C#微信公眾號(hào)開發(fā)之自定義菜單

    這篇文章介紹了C#微信公眾號(hào)開發(fā)之自定義菜單,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • c#求兩個(gè)數(shù)中最大值的方法

    c#求兩個(gè)數(shù)中最大值的方法

    這篇文章主要介紹了c#求兩個(gè)數(shù)中最大值的方法,需要的朋友可以參考下
    2014-02-02
  • C#實(shí)現(xiàn)中英文混合字符串截取的方法

    C#實(shí)現(xiàn)中英文混合字符串截取的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)中英文混合字符串截取的方法,是C#字符串操作的常用方法,需要的朋友可以參考下
    2014-08-08
  • C#實(shí)現(xiàn)日歷效果

    C#實(shí)現(xiàn)日歷效果

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)日歷效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • c#滾動(dòng)字幕動(dòng)畫窗體制作步驟

    c#滾動(dòng)字幕動(dòng)畫窗體制作步驟

    在本篇文章里小編給大家分享了c#滾動(dòng)字幕動(dòng)畫窗體制作步驟和相關(guān)代碼,需要的朋友們可以學(xué)習(xí)下。
    2019-02-02
  • C#實(shí)現(xiàn)設(shè)置或屏蔽熱鍵的方法詳解

    C#實(shí)現(xiàn)設(shè)置或屏蔽熱鍵的方法詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)設(shè)置或屏蔽熱鍵,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • Unity3D基于OnGUI實(shí)時(shí)顯示FPS

    Unity3D基于OnGUI實(shí)時(shí)顯示FPS

    這篇文章主要介紹了Unity3D基于OnGUI實(shí)時(shí)顯示FPS,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • WinForm項(xiàng)目中添加幫助文檔功能

    WinForm項(xiàng)目中添加幫助文檔功能

    這篇文章介紹了WinForm項(xiàng)目中添加幫助文檔功能的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C#調(diào)用halcon實(shí)現(xiàn)使用鼠標(biāo)滾輪對(duì)圖片進(jìn)行縮放顯示

    C#調(diào)用halcon實(shí)現(xiàn)使用鼠標(biāo)滾輪對(duì)圖片進(jìn)行縮放顯示

    這篇文章主要為大家詳細(xì)介紹了C#如何調(diào)用halcon實(shí)現(xiàn)使用鼠標(biāo)滾輪對(duì)圖片進(jìn)行縮放顯示,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • C#繪制橢圓的方法

    C#繪制橢圓的方法

    這篇文章主要介紹了C#繪制橢圓的方法,涉及C#圖形繪制的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06

最新評(píng)論

合川市| 迁安市| 玉溪市| 沁水县| 宜宾县| 樟树市| 城固县| 历史| 固原市| 平湖市| 衡水市| 行唐县| 托克托县| 筠连县| 通许县| 宾阳县| 德江县| 酉阳| 阳原县| 哈巴河县| 保康县| 卓尼县| 纳雍县| 林甸县| 南丹县| 淮滨县| 安平县| 沂水县| 双江| 敦煌市| 平武县| 淳化县| 保山市| 荃湾区| 衡南县| 香河县| 衡山县| 海口市| 广安市| 蓝田县| 晋州市|