微軟在C 8中引入預覽版可空引用型別

2021-09-16 18:23:15 字數 1820 閱讀 2389

微軟已經為開發者提供了預覽版的可空引用型別(nullable reference type),想嘗鮮的開發者可以嘗試這個新特性,並提供反饋。

\u0026#xd;\n\u0026#xd;\n

預覽版可空引用型別是visual studio 2017 15.5 preview 4+的roslyn擴充套件,現在支援.net框架,很快也將支援.net core。該特性在c# 8中是預設啟用的。微軟為此提供了安裝指南。

\u0026#xd;\n\u0026#xd;\n

在c# 8中引入新的可空引用型別是為了解決十億美元問題(billion dollar mistake)。2023年,英國計算機科學家tony hoare在開發algol時稱其為空引用(null reference)。指標最主要的問題是,有時候它們會為空,而這並非我們所期望的。在將空指標作為一種特性引入之後,反而變成產生bug的主要源頭。

\u0026#xd;\n\u0026#xd;\n

早在2023年,使用者就在visual studio user voice裡要求「在c#中引入不可空引用型別」,一年之後,經過投票,該需求排到了第15位,現在已經跑到了第一的位置上。這個特性之所以在很長一段時間內都無法實現,是因為c#的空引用到處可見。c#首席設計師mads torgersen解釋說:

\u0026#xd;\n\u0026#xd;\n

\u0026#xd;\n

問題是空引用太有用了。在c#裡,引用型別預設就是空值。還能用其他什麼值來作為預設值嗎?在你知道該給乙個變數賦什麼值之前,拿什麼作為它的預設值?乙個新建立的引用陣列又該使用怎樣的預設值?

\u0026#xd;\n\u0026#xd;\n

有時候,空值本身也是有意義的。比如,有時候需要讓乙個欄位不包含任何值,或者將空值作為引數進行傳遞也是沒有問題的。但這些情況並不常見。這裡還有另乙個問題:像c#這樣的語言並沒有提供一種方式可以用於說明某處的空值是有意義的還是無意義的。

\u0026#xd;\n

\u0026#xd;\n\u0026#xd;\n

為了避免在c#中引入不可空引用型別,微軟將引用型別規定為預設不可空,並提供了一些機制用於處理可空型別。他們認為,大部分情況下引用型別都是非空或被間接引用的。torgersen寫道:

\u0026#xd;\n\u0026#xd;\n

\u0026#xd;\n\t

我們相信,大部分情況下引用型別都不應該為空。可空引用型別是很罕見的(儘管很難說具體多罕見),所以需要單獨對它們進行註解。\u0026#xd;\n\t\t

c#已經提供了可空的值型別(value type)。\u0026#xd;\n\t\t

不應該讓你自己或其他人在空值這個問題上有太多負擔,除非你確定需要它們。空值應該是我們需要顯式去指定的。\u0026#xd;\n\t

\u0026#xd;\n\u0026#xd;\n

可空引用型別通過問號來定義,如下所示:

\u0026#xd;\n\u0026#xd;\n

\u0026#xd;\nclass person \u0026#xd;\n
\u0026#xd;\n\u0026#xd;\n

微軟希望開發者試用這個新特性,並提供反饋。

\u0026#xd;\n\u0026#xd;\n

更多的資訊可參考 c# futures: nullable reference types、c# 8.0 previewed、a proposal for non-nullable types in c#。

\u0026#xd;\n\u0026#xd;\n

檢視英文原文:microsoft previews nullable reference types in c# 8

微軟在C 8中引入預覽版可空引用型別

微軟已經為開發者提供了預覽版的可空引用型別 nullable reference type 想嘗鮮的開發者可以嘗試這個新特性,並提供反饋。預覽版可空引用型別是visual studio 2017 15.5 preview 4 的roslyn擴充套件,現在支援.net框架,很快也將支援.net cor...

微軟在C 8中引入預覽版可空引用型別

微軟已經為開發者提供了預覽版的可空引用型別 nullable reference type 想嘗鮮的開發者可以嘗試這個新特性,並提供反饋。預覽版可空引用型別是visual studio 2017 15.5 preview 4 的roslyn擴充套件,現在支援.net框架,很快也將支援.net cor...

微軟在C 8中引入預覽版可空引用型別

微軟已經為開發者提供了預覽版的可空引用型別 nullable reference type 想嘗鮮的開發者可以嘗試這個新特性,並提供反饋。預覽版可空引用型別是visual studio 2017 15.5 preview 4 的roslyn擴充套件,現在支援.net框架,很快也將支援.net cor...