在.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