C#面向对象总结(2)
装箱和拆箱:
装箱:就是将值类型转换成引用类型
第一幅图,oi是一个空的引用,i是一个值类型3
发生装箱以后
oi这个引用不再是空,而是堆当中的对象,这个对象包含一个值是3,这个对象是一个新创建的对象。
和原来的值类型的3不是在一个地方存储的,完全不相关。
创建了一个新的对象,一个新的副本。而且这个对象是在堆当中的。
我们知道值类型是在栈当中的
堆当中的对象是需要gc回收的,语言机制帮我们绑定给的
栈当中是超出作用于就没有了,销毁了
我们可以看出,在堆当中创建对象是有一定性能的消耗
装箱的过程能不发生就不发生,因为有性能的消耗
有时候需要发生我们还是需要操作编写这样的代码
各自变化各自的没有相互关系
拆箱:
自定义转换:
我们想将猫咪转换成狗狗类,我们为猫咪类定义一个静态方法。
实现隐式转换至少静态方法
所以pubilc和static是必不可少的
隐式则implicit,并且operator表明是转换操作
operator表示是转换操作 ,操作符一样的操作
但是没有函数名,返回类型是Dog
显示和隐式几乎一模一样,就是一个是implicit一个是explicit
泛型
集合:
缺点是速度慢
相率高效,对数级
委托:
这是在C#2.0中
到了3.0有了Lanbda表达式
事件
和观察者模式类似