现在的位置: 首页 > 综合 > 正文

.net 一切都是对象

2012年01月14日 ⁄ 综合 ⁄ 共 847字 ⁄ 字号 评论关闭

在.net中一切都是对象,这话你可能已经听了不下一百次.好吧,今天就再对你说第一百零一次吧

1,那个class

class 是类,class的实例是对象?  这话没错吧,绝对正确.但.. 请看下面的代码

class  A

{

     static Int32 a;

     Int32 b;

}

虽然没什么用,但的确可以定义这么一个类,OK?

 

接下来,有这样的一个代码片段

A a = new A(); //实例化一个A的对象

这段代码也是能执行的,现在有一个问题,在实例a中有什么?

一个Int32类型的字段b,

为什么没有那个Int32类型的字段a?

因为a是静态的,是属于类的,不是属于实例的

恭喜,全对~但还有一个小问题,那个a既然不属于实例,那它在内存中,存放在哪里呢?

随便找个地方~把a存放好,需要的时候,由编译器帮助我们找到它?

当然,这是可行的,可如果真这么做,那就太没有创意了

2 .net中一切都是对象

第一百零二次在你的耳边唠叨,就像一只邪恶的流氓兔,躲在墙角划圈圈... ...

在.net中 class 这个结构,本身也是由一个对象来表示的

用对象来表示类,这很重要

还是上面的代码

class  A

{

     static Int32 a;

     Int32 b;

}

A a = new A(); 

执行到这里之后,会有两个对像,两个实例,一个实例就是我们显而易见的a,那个包含了一份实例字段Int32 b 的实例,另一个是我们看不见的对象,我们暂且称呼它为 _A 吧,在_A里面包含了静态的字段 Int32 a

很明显的,类似_A的实例,只要存在一份就好,因为它只需要一份,来容纳那些静态的东西,

类似a这样的实例,是可以有无数个的

A a = new A() ; A b = new A(); A c = new A()…  只要你乐意,你可以实例化无数个实例

3 那个.cctor

在.net中提供了一种方法,让我们能够控制_A实例化要做的事情,那种方法就是.cctor

具体请参此文:

http://blog.csdn.net/only_lonely/archive/2010/03/11/5372171.aspx

抱歉!评论已关闭.