人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁(yè)面

C# 2.0 之 static class[2]

C# 2.0 之 static class[2]

更新時(shí)間:2022-07-04 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

看看什么是 static class 吧,很久以前我就為不能聲明一個(gè) abstract sealed class 而苦惱不已,我在 CSDN 上曾經(jīng)提出過這個(gè)問題,可是并沒有獲得共鳴。我得到的回復(fù)是這樣的:

abstract 和 sealed一起用?定義abstract的目的就是抽象基類,seal表示不能繼承的實(shí)體類,完全是兩回事,怎么可能一起用呢?
abstract表明必須要被繼承,sealed表明不可以被繼承,這兩個(gè)是矛盾的,怎么可以一起用呢。

通過查看 IL 代碼,我們會(huì)發(fā)現(xiàn) static class 實(shí)際上就是 abstract sealed class,只不過編譯器在編譯時(shí)順便對(duì) static class 的成員修飾符進(jìn)行檢查而已。

讓我們?cè)賮聿聹y(cè)一下 MS 開發(fā)人員的想法:他們的目的是想獲得 abstract sealed class 的效果,但卻為語(yǔ)義上的矛盾而苦惱不已,大家想獲得一個(gè)優(yōu)美的解決方式,于是就為 C# 2.0 新增了一個(gè) static 關(guān)鍵字,完美的解決了這個(gè)問題。

也許有人會(huì)問:為什么不是 static class = abstract class + static member limit 而要加上 sealed 的限制呢?理由是繼承一個(gè)只有 static 成員的類和重新寫一個(gè)類完全沒有區(qū)別。為什么這么說呢?因?yàn)?static 必然是not virtual,繼承它又能有什么用呢?

static class 還有一個(gè)限制,那就是只能從 System.Object 繼承,為什么會(huì)有這個(gè)限制,理由和上面差不多。

每每提到 static 關(guān)鍵字,我就想起了 static constructor,感謝 MS 的開發(fā)人員提供了這么好的一個(gè)特性。但是 C# 提供了 static constructor 卻沒有提供 static destructor,不過在 Applied Microsoft .NET Framework Programming 一書中 Jeffery Richter 給我們提供了一個(gè)辦法就是通過 System.AppDomain.DomainUnload 事件去達(dá)到同樣的效果。

使用 static constructor 要注意的就是這里拋出任何異常都會(huì)導(dǎo)致該類型在重新加載 AppDoamin 之前不再可用,所以要加倍小心,另外 static contructor 中很容易有兩個(gè)類型死鎖的情況發(fā)生,在編寫代碼的時(shí)候一定要想清楚。

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 罗源县| 商河县| 斗六市| 克拉玛依市| 陆良县| 阳城县| 安义县| 德保县| 南城县| 武夷山市| 建平县| 大同县| 沐川县| 长寿区| 岳西县| 阜宁县| 德化县| 哈巴河县| 江北区| 清新县| 江源县| 武宣县| 武清区| 栾川县| 昭通市| 丽水市| 儋州市| 万源市| 阳原县| 无锡市| 寿宁县| 正阳县| 舟曲县| 乌什县| 昌平区| 军事| 宽甸| 澄城县| 宜昌市| 老河口市| 怀远县|