C# 8 新特性 - 只读struct成员
從C#?8開(kāi)始,我們可以在struct的成員上使用readonly修飾符。?
為struct的成員添加readonly修飾符就表示告訴編譯器和開(kāi)發(fā)者該成員不可以修改struct的狀態(tài)。?
?
看下面這個(gè)例子:?
這里的ToString()方法不會(huì)修改Point這個(gè)struct的狀態(tài),所以我們可以在該方法上添加readonly修飾符來(lái)表示其只讀:?
但是這里會(huì)出現(xiàn)警告,因?yàn)?span id="ozvdkddzhkzd" class="TextRun BCX0 SCXO67251957" lang="en-us">?ToString?訪(fǎng)問(wèn)了未標(biāo)記為?readonly?的?Distance?屬性。也就是需要?jiǎng)?chuàng)建防御性副本時(shí),編譯器會(huì)發(fā)出警告。?
由于Distance屬性不會(huì)修改狀態(tài),所以可以在它前邊加上readonly修飾符以修復(fù)此警告:?
?
請(qǐng)注意,readonly?修飾符對(duì)于只讀屬性是必須要添加的。?編譯器會(huì)假設(shè)?get?訪(fǎng)問(wèn)器可以修改狀態(tài);所以必須顯式聲明?readonly。?
但是自動(dòng)實(shí)現(xiàn)的屬性則是一個(gè)例外;編譯器將所有自動(dòng)實(shí)現(xiàn)的?Getter?視為?readonly,因此,此處無(wú)需向?X?和?Y?屬性添加?readonly?修飾符。?
?
如果我在該struct里面再添加一個(gè)修改狀態(tài)的方法:?
由于該方法確實(shí)修改了struct的狀態(tài),所以如果在該方法上再加上readonly修飾符的話(huà),編譯器就會(huì)報(bào)錯(cuò)。?
?
而如果我把readonly修飾符去掉的話(huà),那么就不會(huì)報(bào)錯(cuò)了:?
總結(jié)
以上是生活随笔為你收集整理的C# 8 新特性 - 只读struct成员的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 微软备战 RPA 市场,Power Pl
- 下一篇: .NET Core 3.0 中间件 Mi