二是有的!

所有类型都是从System.Object派生

var o = System.Object;

o的方法

Equals : 判断是否相同

GetHashCode:得到一个hash码 也算是唯一标识吧

ToString:理论上是返回 String,重载专用

GetType:获取对象信息, 从安全考虑,非虚方法

上述为公开方法

下面是保护

MemberWiseClone: 创建一个新的实例,就是复制一个玩意儿 但是返回一个新的引用,引用的地址不一样~ (这段待查)

Finalizd: 垃圾回收~  但是一般不会调用  

New

1. 计算对象所需要的字节数(包含类型对象指针[tpye object pointer] 和 同步块索引[sync block index] 这两兄弟我倒是不知道他是什么..)

2.在堆上分配内存

3.初始化 1括号中两兄弟

4.调用构造

new完之后 返回一个引用

关于new完之后的回收:C# 没有显示释放的东东, 这玩意儿只能自动释放. 看clr心情

类型转换  

作者说 clr的特性: 类型安全性. System.Object.GetType 因为他不能重载,所以不用将某类型伪装成另外一个类型

然后几种转换方式

 1   public class aa { }
2
3 //失败后直接报错
4 var o = (System.Object)aa;
5
6 //as 只会有一次判断 而 != null这种判断相对开销较小
7 var o1 = aa as System.Object;
8 if(o1 != null) {}
9
10 //这种判断性能上消耗比较大
11 //首先他在if 中就检查了两次 1.首先合适aa 是否兼容 Object 2.判断aa 是否引用 Object
12 if(aa is System.Object) { var o2 = (System.Object)aa;}


运行时的相互联系

创建一个线程 会在栈上创建1MB的空间 用于定义内部变量和传递实参

void a() 
{
var o
= string.Empty;
a1();
var o1= "bbb";
}

void a1() { var o3= "333"; }

假设a 已经加载在线程中

prologue(开始和初始化)

他会在栈上面初始化1MB的空间,然后分配 o(string)的内存, 初始化

如果在a()中 是一个对象 而不是string 或者是值类型的话
就会在堆上创建相应对象(自然其中也有 类型指针对象 和 同步索引)
然后会返回在堆中的内存地址

a();

调用到a1(); 如果有参数 他会在栈中分配好参数的内存, 然后写入返回地址,也就是说当a1()执行完毕之后将要返回到得位置,然后继续执行a1里的东西,比如初始化局部变量,怎么怎么的

epilogue(结束和清扫工作)

清理,返回到调用者,比如a1就返回到之前为他分配的返回地址
posted @ 2011-07-19 09:44  CallMeTommy  阅读(200)  评论(0)    收藏  举报