装箱 与 虚方法分发
读<<.Net本质论 公共语言运行库>>笔记
装箱(Boxing)
CLR允许通过与System.Object兼容的格式,将值类型的实例"克隆"到堆上,这个过程被称为装箱(Boxing),并且只要当一个值类型的实例被赋给一个对象引用变量、参数或者字段时,这个过程就会发生。
例子
public interface IAdjustor
{
void Adjust();
}
public struct Size:IAdjustor
{
public int height;
public int weight;
public void Adjust()
{
height +=2;
weight +=3;
}
}
static App
{
void main()
{
Size s = new Size();
s.Adjust();
IAdjustor js = s; //装箱
js.Adjust();
s = (Size) js; //取消装箱
s.Adjust();
}
}
虚方法的分发
当一个派生类型提供一个实现以重写基类型的方法时,所有对该方法的调用将分发到派生类型的代码。
当在派生类型的方法加上override sealed关键字时,实现了禁止下游的派生类型对该方法作进一步的替换。
例子:
public class Base
{
public virtual void DoIt() { a();}
}
public class Derived:Base
{
public override void DoIt() { b();}
}
void Main()
{
Base a = new Derived();
a.DoIt(); //执行b
Base b = new Base();
b.DoIt(); //执行a
}