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

推荐订阅源

I
InfoQ
S
SegmentFault 最新的问题
N
Netflix TechBlog - Medium
B
Blog
Jina AI
Jina AI
人人都是产品经理
人人都是产品经理
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 聂微东
Last Week in AI
Last Week in AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
V2EX
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
大猫的无限游戏
大猫的无限游戏
U
Unit 42
J
Java Code Geeks
IT之家
IT之家
aimingoo的专栏
aimingoo的专栏
博客园 - 叶小钗
T
The Blog of Author Tim Ferriss
博客园 - 【当耐特】
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
腾讯CDC

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

    }