装箱 与 虚方法分发

 

<<.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

    }

posted @ 2005-12-22 10:18  雨人(ralpher)  阅读(218)  评论(0编辑  收藏  举报