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

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
人人都是产品经理
人人都是产品经理
Engineering at Meta
Engineering at Meta
小众软件
小众软件
I
InfoQ
有赞技术团队
有赞技术团队
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Martin Fowler
Martin Fowler
月光博客
月光博客
雷峰网
雷峰网
aimingoo的专栏
aimingoo的专栏
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
SegmentFault 最新的问题
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
V
Visual Studio Blog
博客园 - 叶小钗
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
GbyAI
GbyAI
P
Proofpoint News Feed
Apple Machine Learning Research
Apple Machine Learning Research

博客园 - 雨人(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

    }