接口继承_1

2023-11-13

摘自Jeffrey的CLR via CSharp

接口方法默认是virtual and sealed. 意思是接口方法默认是没有继承的,这一点在你需要多态时需要注意。

Base b = new Base();  
Derived d = new Derived();  
b = new Derived();  
// Calls Dispose by using b's type: "Base's Dispose"  
b.Dispose();  
((IDisposable)b).Dispose();//通过把b转化为接口可以实现调用子类方法

 

由于没有多态,上述Dispose调用的基类的方法。

源码如下:

class Program
    {
        static void Main(string[] args)
        {
            /************************* First Example *************************/
            Base b = new Base();
            // Calls Dispose by using b's type: "Base's Dispose"
            //b.Dispose();
            // Calls Dispose by using b's object's type: "Base's Dispose"
            //((IDisposable)b).Dispose();
            /************************* Second Example ************************/
            Derived d = new Derived();
            // Calls Dispose by using d's type: "Derived's Dispose"
            //d.Dispose();
            // Calls Dispose by using d's object's type: "Derived's Dispose"

            //((IDisposable)d).Dispose();
            /************************* Third Example *************************/
            b = new Derived();
            // Calls Dispose by using b's type: "Base's Dispose"
            b.Dispose();
            // Calls Dispose by using b's object's type: "Derived's Dispose"
            ((IDisposable)b).Dispose();

        }
    }
    // This class is derived from Object and it implements IDisposable
    internal class Base : IDisposable
    {
        // This method is implicitly sealed and cannot be overridden
        public void Dispose()
        {
            Console.WriteLine("Base's Dispose");
        }
    }
    // This class is derived from Base and it re-implements IDisposable
    internal class Derived : Base, IDisposable
    {
        // This method cannot override Base's Dispose. 'new' is used to indicate
        // that this method re-implements IDisposable's Dispose method
        new public void Dispose()
        {
            Console.WriteLine("Derived's Dispose");
            // NOTE: The next line shows how to call a base class's implementation (if desired)
            // base.Dispose();
        }
    }

如果接口方法需要多态,源码可以改成如下:

internal class Base : IDisposable
    {
        // This method is implicitly sealed and cannot be overridden
        public virtual void Dispose()
        {
            Console.WriteLine("Base's Dispose");
        }
    }
    // This class is derived from Base and it re-implements IDisposable
    internal class Derived : Base, IDisposable
    {
        // This method cannot override Base's Dispose. 'new' is used to indicate
        // that this method re-implements IDisposable's Dispose method
        public override void Dispose()
        {
            Console.WriteLine("Derived's Dispose");
            // NOTE: The next line shows how to call a base class's implementation (if desired)
            // base.Dispose();
        }
    }

真正需要思考的问题是为什么微软要把接口方法默认为不可以继承的?


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

接口继承_1 的相关文章

  • Linux使用Note

    这个文档正在维护完善中 1 释放Swap空间 依次执行如下命令即可 xff0c span class token function sync span span class token builtin class name echo spa
  • A Survey on Concept Drift Adaptation Note

    A Survey on Concept Drift Adaptation Abstract Concept drift primarily refers to an online supervised learning scenario w
  • Note for Understanding Neural Networks Through Deep Visualization

    Note for Understanding Neural Networks Through Deep Visualization Abstract 近年来 xff0c 在训练大型深度神经网络方面取得了巨大进展 xff0c 其中包括训练卷积
  • SAP有用的NOTE(持续更新)

    目录 2421240 Portal is not loaded on Chrome 56 or higher 66971 Supported SAP GUI platforms 66971 Supported SAP GUI platfor
  • C++笔记

    C 中的cast 1 const cast 2 dynamic cast 3 static cast 4 reinterpret cast C 中variable的definition initialization assignment d
  • Reference vs Pointer

    参考自Dan Saks的文章 An Introduction to References References and const The key insights I believe the key insight into why C
  • [非卷积5D] NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis

    不使用3D建模 使用静态图片进行训练 用 非卷积 深度网络表示场景的5D连续体表示 再通过ray marching进行渲染 paper NeRF Representing Scenes as Neural Radiance Fields f
  • Spring_Accepting request input

    Spring MVC provides several ways that a client can pass data into a controller s handler method These include 1 Query pa
  • 1P+N

    1p n是什么意思 单极二线 就是 一个单片空气开关 和一个漏电保护模块组合在一起的开关 火线 零线一起进出组合开关 当漏电发生时漏电模块带动空气开关跳闸 火线和外网电断开 但是零线是不断开的
  • 关于链表的三个常用算法

    找到环的第一个入口点 static public SinglyLinkedListNode
  • Ruby

    1 如何安装ralis 在线安装常常因为公司proxy server的原因产生连接问题 所以可以先到https rubygems org下载然后离线安装 gem install l rails2 3 5 gem
  • 「转」plt.legend()简明使用教程

    原文链接https blog csdn net helunqu2017 article details 78641290 感谢作者辛勤付出 仅作笔记使用 侵删 1 图例legend基础语法及用法 legend语法参数如下 matplotli
  • LINQ的技术演进

    以一个简单的例子来说明 var developersUsingCSharp from d in developers where d Language C select d Name 1 提供对IEnumerable
  • Java springboot自定义bean加载控制顺序在flyway执行后

    在springboot中 我们经常需要在系统启动时执行一些自定义逻辑 例如将数据库中的值读取给bean使用等等 一般采用自定义bean的初始化流程方式实现 方式有许多种 但假如这个bean要被其他模块使用时保证已经被初始化过 就不能简单的采
  • Spring DataBinding

    1 用 ModelAttribute注释方法 1 1 ModelAttribute和 RequestMapping同时注释一个方法 span style font size 14px RequestMapping method Reques
  • 接口继承_1

    摘自Jeffrey的CLR via CSharp 接口方法默认是virtual and sealed 意思是接口方法默认是没有继承的 这一点在你需要多态时需要注意 Base b new Base Derived d new Derived
  • 多线程 并发编程与异步方法

    1 Parallel Programming中的PLINQ Parallel Class与Task Parallelism的特点 并发编程的内容类似于Google的Map Reduce的算法 多线程的着眼点是线程的互斥 同步等 而并行编程的
  • 规则动词的过去式及发音规则

    规则动词的过去式词尾变化有几种 1 一般情况下加ed 如watched planted watered pulled climbed picked 2 以不发音字母e结尾的加d 如liked moved tasted 3 以辅音字母加y结尾
  • 「学习笔记」torchvision.datasets.MNIST 参数解读/中文使用手册

    DataLoader使用手册 参数解读 PyTorch torch utils data DataLoader 中文使用手册 官方手册如下 torchvision datasets MNIST root train True transfo
  • Association Class VS Full Class

    详细分析请见 http etutorials org Programming UML Chapter 6 Class Diagrams Advanced Concepts Association Class 1 关联类的必要性 关联类隔离了

随机推荐

  • Tensorflow学习笔记(一)

    这里写自定义目录标题 Tensorflow 基本分类 对服装图像进行分类 电影评论文本分类 Basic regression Predict fuel efficiency 过拟合和欠拟合 过拟合 Tensorflow Tensorflow
  • American Sign Language手语识别(机器学习第二个小练习)

    American Sign Language手语识别 1 需要的数据集 链接 https pan baidu com s 1bf98hHYZbKuY 8hdfe8NRQ 提取码 uvzj 2 实验代码如下 import pandas as
  • winform 如何获取某个子控件的子控件并操作它

    一 panel1 Controls button1 或 panel1 Controls 0 二 比如某窗体的子控件为UserControl 且UserControl上有n多个n种控件 那么可以再UserControl里写属性获取
  • 【综合类型第 34 篇】喜讯!喜讯!!喜讯!!!,我在 CSDN 的第一个实体铭牌

    这是 综合类型第 34 篇 如果觉得有用的话 欢迎关注专栏 2022年7月19日 14 25 CSDN 官方博客给我发了一条私信 内容如下 为了表彰在 CSDN 社区发展中 做出 突出贡献 取得 优秀成绩 的用户 我们特地准备了实体铭牌 恭
  • EA12版本怎么恢复Project Browser

    其实是个小问题 不知道怎么就关闭Project Browser 了 找了好久才找到
  • springboot2.0从apollo读取配置

    参考 https github com nobodyiam apollo build scripts 本篇文章包括两点 Windows环境下apollo单机搭建 springboot2 0从apollo读取配置 一 windows环境下ao
  • kubectl查看容器日志

    kubectl get pod n 命名空间 kubectl logs 容器名称 n 命名空间
  • 青龙脚本 小黄鸟配合虚拟机抓变量 软件集

    鉴于很多青龙脚本变量 真机很难抓到 需要小黄鸟配合虚拟机抓变量 为方便网友 把相关3个软件分享 以单个文件形式 1 小黄鸟 https wwm lanzouy com i5vWT01qi6na 2 虚拟机 https wwm lanzouy
  • nvcc使用指定gcc版本(不改变全局gcc版本)

    在nvcc后面加上 compiler bindir usr bin gcc x即可 x为指定的gcc版本号
  • MSP430F5529学习笔记(6)——导入MSP430Ware,查看例程

    MSP430WARE下载 目录 在线版本 下载MSP430Ware 查看例程 导入例程 离线版本 下载MSP430Ware 查看例程 导入例程 MSP430Ware里面有很多例程和库函数使用手册 我们可以查看学习 非常重要 在线版本 下载M
  • 使用计算机结束时断开终端的连接属于什么,计算机结束时断开终端的连接属于什么...

    计算机结束时断开终端的连接属于外部终端的物理安全 终端安全管理 endpoint security management 是一种保护网络安全的策略式方法 它需要终端设备在得到访问网络资源的许可之前遵从特定的标准 推荐学习 web前端视频教程
  • 【数模】插值算法

    插值算法的介绍 插值的作用 当现有的数据是极少的 不足以支撑分析的进行时 用于 模拟产生 一些新的但又比较靠谱的值来满足需求 插值函数 插值 插值法的概念 插值法的分类 插值多项式 P x 为次数不超过n的代数多项式 即 数模中也常见 但不
  • ARM——体系架构

    1 ARM简介 ARM是Advanced RISC Machines的缩写 它是一家微处理器行业的知名企业 该企业设计了大量高性能 廉价 耗能低的RISC 精简指令集 处理器 公司的特点是只设计芯片 而不生产 它将技术授权给世界上许多著名的
  • Centos下使用脚本快速安装GO语言环境

    Centos使用shell脚本快速安装go环境并安装spaceVim IDE 脚本如下 bin bash env git install echo 安装依赖中 sudo yum y install make autoconf automak
  • Tomcat配置context.xml问题

    关于Tomcat的配置文件问题 请参考Apache Tomcat官网Document菜单 根据版本号选择恰当的Reference 我使用的环境 netbeans 内嵌 Tomcat 8 0 1
  • 彻底删除VMware虚拟机

    您是否和我一样被VMware气到了呢 您是否再也不想理VMware了呢 您是否不想再在自己电脑上看到VMware这几个英文字母了呢 来吧 跟着我的步骤 一起和VMware说拜拜吧 一 在卸载VMware虚拟机之前 要先把与VMware相关的
  • 工业上的数控机床所属计算机应用的什么领域,以下哪一项不是企业初步战略方案包括的内容?()。...

    摘要 弹簧振子的振幅增加一倍 下业初则 步战工业机器人最重要的核心能力 社会学是指一门科学 略方即它以解释的方式来理解社会行动 略方据此 通过社会行为的过程及其结果 对社会行为作出因果解释 因此 社会学的研究对象是 研究的方法是 弹簧振子的
  • 西门子S7 模拟器使用教程

    一 S7协议概述 S7协议是西门子S7系列PLC通信的核心协议 它是一种位于传输层之上的通信协议 其物理层 数据链路层可以是MPI总线 PROFIBUS总线或者工业以太网 S7以太网协议本身也是TCP IP协议簇的一员 S7协议在OSI中的
  • PCB中过孔和通孔焊盘的区别

    在PCB设计中 过孔VIA和焊盘PAD都可以实现相似的功能 它们都能插入元件管脚 特别是对于直插 DIP 封装的的器件来说 几乎是一样的 但是 在PCB制造中 它们的处理方法是不一样的 1 VIA的孔在设计中表明多少 钻孔就是多少 然后还要
  • 接口继承_1

    摘自Jeffrey的CLR via CSharp 接口方法默认是virtual and sealed 意思是接口方法默认是没有继承的 这一点在你需要多态时需要注意 Base b new Base Derived d new Derived