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

推荐订阅源

Y
Y Combinator Blog
The GitHub Blog
The GitHub Blog
云风的 BLOG
云风的 BLOG
Engineering at Meta
Engineering at Meta
Google DeepMind News
Google DeepMind News
aimingoo的专栏
aimingoo的专栏
Recent Announcements
Recent Announcements
A
About on SuperTechFans
U
Unit 42
MyScale Blog
MyScale Blog
J
Java Code Geeks
博客园_首页
Blog — PlanetScale
Blog — PlanetScale
D
Docker
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 司徒正美
量子位
月光博客
月光博客
G
Google Developers Blog
V
V2EX
博客园 - 聂微东
宝玉的分享
宝玉的分享
IT之家
IT之家
Vercel News
Vercel News

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

    }