Accelerated C#2008读书笔记3
2010-07-28 22:29 撞破南墙 阅读(1230) 评论(2) 编辑 收藏 举报对c#底层不太了解,可能认识有误或者浅薄,欢迎斧正。
10 boxing 装箱
@1被装箱的值是初始化值的一个副本。---常见的一个应用是传参。
@2什么时候发生装箱:
#1值类型转换成引用/System.ValueType/指向值类型实现的接口引用
#2 枚举转换成System.Enum 引用
为什么要装箱? 从技术上说 直接获得一个值类型的引用是不可能的。
因为值存放在栈中,他在栈中的位置是变化的,有可能引用一个为空的栈的位置。所以我们要装箱。
@3CLR里拆箱低效的根源在于拆箱和一个值副本组合在一起。
11所有的类都派生自object 所有都可以隐式转为 object然后统一对待。
比如接口+泛型强大的Repository 中就用了模板加object统一对待所有的。
12System.Object 基类
我们应该了解一下基类里面有什么。以后等我看到了相关的知识再继续分享对基类的认识。
===============================================================
名称 | 说明 | |
---|---|---|
Equals | 已重载。 确定两个 Object 实例是否相等。 | |
GetHashCode | 用作特定类型的哈希函数。GetHashCode 适合在哈希算法和数据结构(如哈希表)中使用。 | |
GetType | 获取当前实例的 Type。 | |
ReferenceEquals | 确定指定的 Object 实例是否是相同的实例。 | |
ToString | 返回表示当前 Object 的 String。 |
名称 | 说明 | |
---|---|---|
Finalize | 允许 Object 在“垃圾回收”回收 Object 之前尝试释放资源并执行其他清理操作。 | |
MemberwiseClone | 创建当前 Object 的浅表副本。 |
===============================================================
13 对象的创建
@1对于值类型 new 会完全初始化 (所有位置0)
@2类的初始化除非没有其他重载的构造函数 才有默认的构造函数
14字段的初始化
@1从该类开始 初始化静态变量=》@2初始化父类的静态变量=》@3带 函数表达式 赋值的成员变量 =》构造函数
(有点模糊)
15类的析构
对于 object 类里 的Finalize 方法最好不要重写。否则会有不确定性的删除,因为会涉及到其他的类。
如果你想主动释放资源,可以使用 IDisposable( 定义一种释放分配的资源的方法。)
对c#底层不太了解,可能认识有误或者浅薄,欢迎斧正。
参考引用了MSDN
作者:撞破南墙
出处:http://www.cnblogs.com/facingwaller/
关于作者:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。