欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# 8.0新特性介紹

 更新時(shí)間:2017年10月31日 11:36:40   作者:葡萄城控件技術(shù)團(tuán)隊(duì)  
C# 語言是在2000發(fā)布的,至今已正式發(fā)布了7個(gè)版本,每個(gè)版本都包含了許多令人興奮的新特性和功能更新。下面通過本文給大家分享下C# 8.0的三個(gè)令人興奮的新特性,需要的朋友參考下吧

C# 語言是在2000發(fā)布的,至今已正式發(fā)布了7個(gè)版本,每個(gè)版本都包含了許多令人興奮的新特性和功能更新。同時(shí),C# 每個(gè)版本的發(fā)布都與同時(shí)期的 Visual Studio 以及 .NET 運(yùn)行時(shí)版本高度耦合,這也有助于開發(fā)者更好的學(xué)習(xí)掌握 C#,并將其與 Visual Studio 以及 .NET 的使用結(jié)合起來。

加快 C# 版本的發(fā)布速度

在被稱為“新微軟”的推動(dòng)下,微軟創(chuàng)新的步伐也加快了。為了做到加快步伐,微軟開發(fā)部門將一些過去集成在一起的技術(shù)現(xiàn)在都分離了出來。

Visual Studio、.NET Framework、.NET 運(yùn)行時(shí)、編譯器和編譯運(yùn)行時(shí)的運(yùn)行語言都被拆分成自己的包和版本,這意味著以上每一個(gè)都可以按照自己的節(jié)奏發(fā)布了。現(xiàn)在,我們已經(jīng)看到了這種模式的成功。.NET Core 2.0 的工作已經(jīng)完成了,并從 Visual Studio 發(fā)布出來,同時(shí)也增加了對(duì) Linux 的支持。幾乎與 .NET Core 2 發(fā)布的同時(shí),C# 7.1 版本也發(fā)布了。

C# 7.1 是一個(gè)重要的發(fā)布版本,雖然新功能不多,但它卻是 C# 第7個(gè)大版本的開始。C# 7.2 版本的工作已經(jīng)展開了,同時(shí)也在計(jì)劃著 C# 7.3 版本。盡管 C# 8.0 版本還有點(diǎn)遠(yuǎn),但是微軟技術(shù)人員已經(jīng)對(duì) C# 8.0 版本的特性有了一些想法。

語言設(shè)計(jì)的討論是公開的,圍繞 C# 8.0 版本新特性的問題部分也進(jìn)行了廣泛的討論。檢查每個(gè)發(fā)行版本的里程碑,同時(shí)也為未來的 C# 路線圖做好評(píng)估。

下面正式開始介紹 C# 8.0 版本中令人興奮的三個(gè)新特性。

非空和可空的引用類型

C# 有兩大變量類型:基本類型和引用類型。原先的類型是 int、char 和 double。這些類型都不能接受 null 值。在不分配新值的情況下,創(chuàng)建一個(gè)新的 int 值,會(huì)導(dǎo)致 int 值為 0 而不是 null。C# 2.0 介紹了帶有“?”符號(hào)的變量原語的可空版本。因此,int?是 int 的一個(gè)版本,它可以接受空值。

另一方面,引用類型(如字符串這樣的對(duì)象)始終能夠接受 null 值,并將 null 作為默認(rèn)值。這也帶了來一個(gè)缺點(diǎn),就是可能導(dǎo)致應(yīng)用程序中帶入空引用。

在 C# 8.0 中,將引用類型設(shè)為非空,成為了一個(gè)可選的特性。

為 C# 引入這樣的特性是很困難的,因?yàn)檫@為原本已經(jīng)運(yùn)行很好的代碼,引入了潛在的編譯錯(cuò)誤。因此需要做的是,創(chuàng)建此功能的方法,而不是為開發(fā)人員帶來無法估量的工作量。

根據(jù)設(shè)計(jì)方案,C# 團(tuán)隊(duì)決定采取一個(gè)允許開發(fā)者可以選擇可空引用類型的方法。這將是一個(gè)工程級(jí)別的設(shè)定,以便啟用對(duì)可空引用的驗(yàn)證。一旦啟用,可接受 null 值的對(duì)象就需要使用?運(yùn)算符進(jìn)行聲明。

如下代碼:

String s = null;
Console.Write(s);

這將引起警告,因?yàn)樽址荒芙邮芸罩怠R虼诵枰韵麓a:

String? s = null;
Console.Write(s);

然而,上面代碼也會(huì)在Console拋出一個(gè)警告,寫的是不希望收到一個(gè)空字符串。事實(shí)上,原始代碼可能有錯(cuò)誤,所以級(jí)聯(lián)警告可以幫助我們避免運(yùn)行時(shí)錯(cuò)誤。這是最有可能提高代碼質(zhì)量的語言變化。

新的輕量級(jí)類:Records

C# 8.0 的一個(gè)很棒的新特性,是有一種新方式來創(chuàng)建一個(gè)被稱為 records 的類。這個(gè)類本質(zhì)上是一個(gè)非常輕量級(jí)的類,是一個(gè)字段集合,能夠幫助快速創(chuàng)建 POCO 類型的對(duì)象,同時(shí)也可以解決比較對(duì)象是否相等時(shí)的關(guān)鍵問題。

例如,為銀行帳戶創(chuàng)建 record 類型:

class BankAccount(Guid Id, string Name, decimal Balance)

這是一種創(chuàng)建簡(jiǎn)單類的很好的方法。

用 records 解決對(duì)象相等問題

在 C# 編程中,一個(gè)最難掌握的內(nèi)容就是,將==運(yùn)算符用于引用類型和原語之間的區(qū)別。

為了舉例說明,我們使用==對(duì)比兩個(gè)整數(shù):

int I = 1;
int j = 1;
i == j //yields true

原語的值是相等的。但是,對(duì)于引用類型,卻不相等。

Object I = new Object();
Object j = new Object();
i == j //yields false

這是因?yàn)?C# 的引用類型比較會(huì)考慮引用相等,也就是說,只有當(dāng)兩個(gè)對(duì)象是同一個(gè)對(duì)象才相等。records 類型提供了結(jié)構(gòu)上的相等,等同于相等運(yùn)算符。創(chuàng)建新 record 的語法非常簡(jiǎn)潔,因?yàn)樯傻膶?duì)象是簡(jiǎn)單的數(shù)據(jù)傳輸對(duì)象。

Records 是一個(gè)輕量級(jí)對(duì)象,使用起來非常方便。雖然 Records 不是語言的一個(gè)突破性的變化,但也是一個(gè)漸進(jìn)的改進(jìn),值得歡迎。

默認(rèn)接口實(shí)現(xiàn)

版本控制接口可能會(huì)令人懊惱, 因?yàn)樗蠼涌谏系男路椒▉韺?shí)現(xiàn)接口上的所有對(duì)象。隨著新方法添加到了接口中,實(shí)現(xiàn)它們的任務(wù)就落在了實(shí)現(xiàn)接口的各個(gè)類中。因?yàn)楦鱾€(gè)實(shí)現(xiàn)不必須共有同一個(gè)父類,添加到接口的方法就可以在各自的類中實(shí)現(xiàn)。

默認(rèn)接口實(shí)現(xiàn)允許在接口中指定一個(gè)實(shí)現(xiàn),只要它是接口上現(xiàn)有方法的函數(shù)實(shí)現(xiàn)的。下面再以銀行帳戶為例:

public interface IBankAccountManager{
 void PerformTransaction(decimal amount, string reason);
}

現(xiàn)在為了便于使用,我們想在銀行賬戶上提供明確的借方和信譽(yù)功能。通常我們會(huì)為接口添加這些功能并在所有的類中實(shí)現(xiàn)它們。

public interface IBankAccountManager{
 void PerformTransaction(decimal amount, string reason); 
 void PerformDebit(decimal amount, string reason){ 
  PerformTransaction(-1 * amount, $”Debit: {reason}”); 
 } 
 
 void PerformCredit(decimal amount, string reason){ 
  PerformTransaction(amount, $”Credit: {reason}”); 
 } 
}

默認(rèn)接口實(shí)現(xiàn)提供了一種強(qiáng)大的新方法來擴(kuò)展實(shí)現(xiàn)接口的類,而無需重復(fù)代碼。只需遵從默認(rèn)實(shí)現(xiàn),許多接口的類的實(shí)現(xiàn)就可以得到大大簡(jiǎn)化。

其它的 C# 8.0 新特性

正是因?yàn)檫@些新特性,才讓我們毫不懷疑這就是 C# 8.0。以下是其它一些 C# 8.0 新特性:

  • 提升擴(kuò)展支持 – 這種提升不僅僅可以用于擴(kuò)展方法,它還提供了對(duì)屬性、靜態(tài)方法和更多方面的支持。
  • 異步數(shù)據(jù)流 – 能夠擁有支持異步操作的枚舉值。包括新的 iasyncenumerable <T> 和 iasyncenumerator <T> 接口。
  • Async Disposable – iasyncdisposable 允許對(duì)象有一個(gè)異步的處理方法。 

結(jié)論

過去幾年中,.NET 的創(chuàng)新速度確實(shí)加快了。雖然 C# 8.0 目前還沒有實(shí)現(xiàn),但是它比起 C# 7.0,將帶來很多有幫助的提升,讓我們一起期待 C# 8.0 的早日到來。

相關(guān)文章

  • 基于Unity實(shí)現(xiàn)3D版2048游戲的示例代碼

    基于Unity實(shí)現(xiàn)3D版2048游戲的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Unity實(shí)現(xiàn)簡(jiǎn)易的3D版2048游戲,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的可以參考一下
    2023-02-02
  • C# 本地函數(shù)與 Lambda 表達(dá)式詳細(xì)介紹

    C# 本地函數(shù)與 Lambda 表達(dá)式詳細(xì)介紹

    這篇文章主要介紹了C 語言本地函數(shù)與 Lambda 表達(dá)式,,由于 C# 長(zhǎng)期以來一直使用 lambda,因此從差異和相似之處來看本地函數(shù)確實(shí)是有意義的,感興趣的小伙伴可以參考下面文章內(nèi)容
    2021-09-09
  • C#實(shí)現(xiàn)發(fā)送郵件的三種方法

    C#實(shí)現(xiàn)發(fā)送郵件的三種方法

    這篇文章主要介紹了C#實(shí)現(xiàn)發(fā)送郵件的三種方法,實(shí)例講述了Localhost,SMTP與SSL-SMTP三種實(shí)現(xiàn)方法,對(duì)于C#項(xiàng)目開發(fā)有不錯(cuò)的借鑒價(jià)值,需要的朋友可以參考下
    2014-11-11
  • C#實(shí)現(xiàn)聊天消息渲染與圖文混排詳解

    C#實(shí)現(xiàn)聊天消息渲染與圖文混排詳解

    在實(shí)現(xiàn)聊天軟件時(shí),渲染文字表情圖文混排是一項(xiàng)非常繁瑣的工作,再加上還要支持GIF動(dòng)圖、引用消息、撤回消息、名片等不同樣式的消息渲染時(shí),就更加麻煩了。本文就來和大家分享一下具體實(shí)現(xiàn)方法,希望對(duì)大家有所幫助
    2023-02-02
  • C#中FileSystemWatcher的使用教程

    C#中FileSystemWatcher的使用教程

    這篇文章主要給大家介紹了關(guān)于C#中FileSystemWatcher使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • C#算法之無重復(fù)字符的最長(zhǎng)子串

    C#算法之無重復(fù)字符的最長(zhǎng)子串

    這篇文章介紹了C#算法之無重復(fù)字符的最長(zhǎng)子串,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • C#開發(fā)中經(jīng)常用的加密解密方法示例

    C#開發(fā)中經(jīng)常用的加密解密方法示例

    這篇文章主要給大家介紹了關(guān)于C#開發(fā)中經(jīng)常用的加密解密方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 淺談C#中的Infinity和NaN

    淺談C#中的Infinity和NaN

    下面小編就為大家?guī)硪黄獪\談C#中的Infinity和NaN。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • 基于C#的抽象類別詳解

    基于C#的抽象類別詳解

    下面小編就為大家分享一篇基于C#的抽象類別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • visio二次開發(fā)--判斷文檔是否已發(fā)生變化(變化就加星號(hào)*)

    visio二次開發(fā)--判斷文檔是否已發(fā)生變化(變化就加星號(hào)*)

    最近做一個(gè)故障樹診斷的項(xiàng)目,用visio二次開發(fā),可以同時(shí)打開多個(gè)繪制的故障樹圖形文檔。項(xiàng)目中需要實(shí)現(xiàn)判斷文檔是否發(fā)生變化,這是很多編輯軟件的基本功能,變化了就加個(gè)星號(hào)*
    2013-04-04

最新評(píng)論