闲谈.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》,之所以用截图,是为了增加本文的说服性。(无凭无证,谁闲的蛋疼听你瞎扯淡, - -!)

没什么高端的技术,高手绕行、轻拍...

 

posted @ 2013-05-30 21:36  DebugLZQ  阅读(829)  评论(0编辑  收藏  举报