闲谈.NET中的类型和访问修饰符
關于類型
關于.NET中類型,在網上很多地方我們可以看到的是:值類型和引用類型兩種。我也這么認為的,貌似這樣認為也沒有錯。但本文從學術角度來說說,想到哪里就說到哪里了,各位就當是茶語飯后喝其他同事閑談扯淡,聽聽就行,百家爭鳴,不洗勿噴。
其實還有兩種,如下:
簡單的說一下:
Value types:繼承自System.ValueType的類型。
Generic type parameters:帶泛型參數的類型,即DebugLZQ在泛型中提到過的所謂“開類型”,其特點是在T被指定之前無法被實例化。可參考下DebugLZQ前面的這篇博文:淺談.NET中泛型的基本原理?。
pointer types:指針類型,一種unsafe的非托管類型。
Reference types:非以上三種類型的其他類型。需要注意的是System.ValueType和所有的引用類型都繼承自 System.Object基類。
我們通常講,在.NET中System.Object是所有類型的基類,其實我們完全也可以自己定義一個類不繼承自System.Object,只不過.NET強烈不推薦我們這樣去做。有興趣的可以去查下CLR,看看具體的實現。其實.NET中所有的既有的接口,例如IList、IEmumerable、ICollection,都不繼承自System.Object,因為當你打開其IL你找不到extends System.Object這樣的標識,其實接口不繼承自任何類。參見王濤的這篇博文:[你必須知道的.NET]第二十七回:interface到底繼承于object嗎?
關于訪問修飾符?
本來沒打算寫這塊,既然都說了類型了,就把訪問修飾符也拿過來寫寫,湊個字數 - -!。
?
做個表格解釋下:
| C# 術語 | CLR術語 |
| private | Private |
| protected | Family |
| 不支持 | Family and Assembly |
| internal | Assembly |
| protected internal | Family or Assembly |
| public | Public |
?
?
?
?
?
?
?
?
?
?
?
仍記得面試這家公司時,技術副總聊的第一個問題就是.NET類型和訪問修飾符,當時我回答的是后者,然后聊得很愉快。
記得說下本文中的截圖來自《C# 5.0 in a Nutshell》,之所以用截圖,是為了增加本文的說服性。(無憑無證,誰閑的蛋疼聽你瞎扯淡, - -!)
沒什么高端的技術,高手繞行、輕拍...
?
轉載于:https://www.cnblogs.com/DebugLZQ/archive/2013/05/30/3103632.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的闲谈.NET中的类型和访问修饰符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息掩码游戏地图掩码相关(msk)
- 下一篇: asp.net ajax控件工具集 Au