代码改变世界

Accelerated C#2008读书笔记3

2010-07-28 22:29  撞破南墙  阅读(1213)  评论(2编辑  收藏  举报

对c#底层不太了解,可能认识有误或者浅薄,欢迎斧正。

10  boxing 装箱

@1被装箱的值是初始化值的一个副本。---常见的一个应用是传参。

@2什么时候发生装箱:

          #1值类型转换成引用/System.ValueType/指向值类型实现的接口引用

          #2 枚举转换成System.Enum 引用

为什么要装箱? 从技术上说 直接获得一个值类型的引用是不可能的。

因为值存放在栈中,他在栈中的位置是变化的,有可能引用一个为空的栈的位置。所以我们要装箱。

 

@3CLR里拆箱低效的根源在于拆箱和一个值副本组合在一起

 

11所有的类都派生自object 所有都可以隐式转为 object然后统一对待。

                                        比如接口+泛型强大的Repository 中就用了模板加object统一对待所有的。

12System.Object 基类 

 我们应该了解一下基类里面有什么。以后等我看到了相关的知识再继续分享对基类的认识。

 

  ===============================================================
名称说明
Public methodSupported by the .NET Compact Framework Object 初始化 Object 类的新实例。
页首
公共方法

(请参见 受保护的方法 
 名称说明
Public methodSupported by the .NET Compact Framework Equals 已重载。 确定两个 Object 实例是否相等。
Public methodSupported by the .NET Compact Framework GetHashCode 用作特定类型的哈希函数。GetHashCode 适合在哈希算法和数据结构(如哈希表)中使用。
Public methodSupported by the .NET Compact Framework GetType 获取当前实例的 Type
Public methodStaticSupported by the .NET Compact Framework ReferenceEquals 确定指定的 Object 实例是否是相同的实例。
Public methodSupported by the .NET Compact Framework ToString 返回表示当前 Object 的 String
 
受保护的方法

 名称说明
Protected methodSupported by the .NET Compact Framework Finalize 允许 Object 在“垃圾回收”回收 Object 之前尝试释放资源并执行其他清理操作。
Protected methodSupported by the .NET Compact Framework MemberwiseClone 创建当前 Object 的浅表副本。


  ===============================================================

 

13 对象的创建

@1对于值类型 new 会完全初始化 (所有位置0)

@2类的初始化除非没有其他重载的构造函数 才有默认的构造函数

 

14字段的初始化

@1从该类开始 初始化静态变量=》@2初始化父类的静态变量=》@3带 函数表达式 赋值的成员变量 =》构造函数

(有点模糊)

 

15类的析构

对于 object 类里 的Finalize 方法最好不要重写。否则会有不确定性的删除,因为会涉及到其他的类。

如果你想主动释放资源,可以使用 IDisposable( 定义一种释放分配的资源的方法。)

 

 

对c#底层不太了解,可能认识有误或者浅薄,欢迎斧正。

参考引用了MSDN