惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 三生石上(FineUI控件)
雷峰网
雷峰网
WordPress大学
WordPress大学
S
SegmentFault 最新的问题
博客园 - 叶小钗
The Cloudflare Blog
T
Tailwind CSS Blog
Hugging Face - Blog
Hugging Face - Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
月光博客
月光博客
小众软件
小众软件
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell
大猫的无限游戏
大猫的无限游戏
阮一峰的网络日志
阮一峰的网络日志
V
V2EX
美团技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 聂微东
量子位
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
宝玉的分享
宝玉的分享

博客园 - 雨人(ralpher)

volatile VS synchronized 记录一个小问题:游标中声明排序的写法问题 Great feature for Sql 2005--Row_number()分页 Recommend a site. 推荐一文:程序员的灯下黑:坚持和良好心态近乎道 EnglishTalk----Too Much Test Automation? 我这几年-----对于初学者的几点建议 面向对象设计原则(转) 系分考试论文实例12篇 一道禅语 好久没来了 First trip to BeiJing 飘到北京了 体验Castle中从配置文件注册组件以及传递参数的一个小例子 IOC模式的学习笔记 IBatisNet之运行时多数据库切换方案 读写xml配置文件 在IBatisNet中使用存储过程 IBatisNet初步体验
装箱 与 虚方法分发
雨人(ralpher) · 2005-12-22 · via 博客园 - 雨人(ralpher)
 

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

    }