中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#7.1有哪些特性

發布時間:2021-11-24 13:38:57 來源:億速云 閱讀:141 作者:iii 欄目:大數據

這篇文章主要講解了“C#7.1有哪些特性”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C#7.1有哪些特性”吧!

自2003年以來,Microsoft首次考慮對C#使用帶小數點后位數的版本。當前暫定下一個版本是C# 7.1,其中有望包括:異步Main函數(Async Main)、默認表達式(Default Expression)、推導元組名(Infer Tuple Names)和使用泛型的模式匹配(Pattern-matching with Generics)等。

異步Main函數

最讓測試異步代碼的開發人員沮喪的,無疑是控制臺應用當前不支持異步入口點(EntryPoint)。雖然變通方法是編寫多行樣板代碼,但是這樣的模式依賴于對方法的非正常使用,難于理解。例如:

ublic static void Main()
{
    MainAsync().GetAwaiter().GetResult();
}
private static async Task MainAsync()
{
    ... // 程序主代碼。
}

為解決這個問題,在“異步Main函數建議”中,添加了如下四個新的函數簽名,羅列了可能的入口點。

static Task Main()
static TaskMain()
static Task Main(string[])
static TaskMain(string[])

如果代碼中不存在另一個非異步Main函數,那么只要給出一個上述的入口點函數,編譯器就會生成所需的樣板代碼。唯一的限制是需要向后兼容。

Microsoft曾考慮允許“async void Main()”,但是這種做法會使編譯器更復雜,并且Microsoft總體上并不鼓勵在事件處理器之外使用“async void”。

默認值(即Nothing)

VB沒有表示“null”的關鍵字,這是C#和VB間的一個微妙的差別。但是VB有一個關鍵字“Nothing”。在語言技術規范中,對該關鍵字給出了如下說明:

Nothing是一個特殊的常值。它沒有類型,可轉換為類型系統中的任意類型,也包括類型參數。在轉換為某個特定類型后,它等價于該類型的默認值。

C#當前使用“default(T)”模式實現同一效果,但略為繁瑣,尤其是類的名字很長時。C# 7.1中將提供一個“默認常值”(Default Literal),其描述為:

這一類型的表達式可通過常值轉換為默認值或null值,隱式地轉換為any類型。

該類型向默認常值的推理與向null常值推理的工作機制一樣,除非允許any類型(不只是引用類型)。

在可以使用null的地方,通常也可以使用默認常值。這一做法被看成是C#建議中的一個倒退,可能因為人們通常會對兩個非常類似的方法完成同一件事大皺眉頭。在設計會議紀要中,就有人提出疑問:

我們是否正在挑起類型之爭?

一個使用默認常值的例子如下:

ImmutableArrayx = default;
return default;
void Method(ImmutableArrayarrayOpt = default)
var x = new[] { default, ImmutableArray.Create(y) };
const int x = default;
if (x == default)
if (x is default)
y = default as RefType //編譯器告警:總是null。
int i = default

下面例子給出的是對默認常值的非法使用:

const int? y = default;
if (default == default)
if (default is T)
var i = default
throw default

后者無疑是一個C#設計上的奇特構件。在設計會議紀要中,給出了如下說法:

在C#中,允許開發人員拋出null。這會引發一個運行時錯誤,進而導致拋出一個NullReferenceException異常。因此,拋出NullReferenceException并非正大光明的,而是一種丑陋的模式。

完全沒有理由允許拋出默認值。我們并不認為用戶會感覺這是可行的,或是了解它的工作機制。

Microsoft并未引入默認常值,而是考慮通過擴展“null”實現同一效果。因為在VB中“nothing”和“null”是兩個不同的關鍵詞,所以在VB中可以這樣做。即使不使用關鍵字,VB中也具有null的概念。因此,開發人員可以看到“NothingReferenceException”這樣的異常。

感謝各位的閱讀,以上就是“C#7.1有哪些特性”的內容了,經過本文的學習后,相信大家對C#7.1有哪些特性這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

盐池县| 台湾省| 乡宁县| 横峰县| 汾西县| 马山县| 汶上县| 海盐县| 海宁市| 科技| 荆州市| 新泰市| 麻城市| 平遥县| 濮阳市| 肥乡县| 金华市| 永善县| 两当县| 东乌珠穆沁旗| 东乡县| 合山市| 广河县| 阳朔县| 安仁县| 福鼎市| 东宁县| 和田县| 弥渡县| 东方市| 西畴县| 新泰市| 皋兰县| 武鸣县| 宁河县| 宜宾市| 怀仁县| 北安市| 洛阳市| 赤水市| 晋州市|