基础知识系列?接口的显示实现和隐式实现

x

CLR via C#中的一个小结将标题定为:"13.5 隐式和显式接口方法实现(幕后发生的事情)"...

直接上代码

    public interface I
    {
        int GetIntFun();

        int GetIntFunVirtual();

        string GetStrFun();
    }

    public class 我是一个类名字叫雷雷 : I
    {
        /// <summary>
        /// 隐式实现-派生类不可以重写
        /// 0.必须标记为public,否则报错:{“我是一个类名字叫雷雷”不实现接口成员“I.GetIntFun()”。“我是一个类名字叫雷雷.GetIntFun()”无法实现接口成员,因为它不是公共的。}
        /// </summary>
        /// <returns></returns>
        public int GetIntFun()
        {
            return 0;
        }

        /// <summary>
        /// 隐式实现-派生类可以重写
        /// </summary>
        /// <returns></returns>
        public virtual int GetIntFunVirtual()
        {
            return 0;
        }

        /// <summary>
        /// 显式实现
        /// 0.不允许指定可访问性(但是,编译器生成方法的元数据时,可访问性会设为private)
        /// 1.不允许标记virtual
        /// 1.只有通过接口类型的变量才能调用
        /// </summary>
        /// <returns></returns>
        string I.GetStrFun()
        {
            return "";
        }
    }

    /// <summary>
    /// 扩展知识点,
    /// 涉及virtual ,sealed ...
    /// new关键字,使派生类隐藏父类方法
    /// </summary>
    public class 我是一个类名字叫小雷 : 我是一个类名字叫雷雷
    {
        public override int GetIntFunVirtual()
        {
            return base.GetIntFunVirtual();
        }

        public new int GetIntFun()
        {
            return 1;
        }
    }

调用

    class Program
    {
        static void Main(string[] args)
        {
            我是一个类名字叫雷雷 ll = new 我是一个类名字叫雷雷();
            ll.GetIntFun();
            ll.GetIntFunVirtual();
            //ll.GetStrFun();//报错!!!显式实现,派生类访问不到的
            I i = new 我是一个类名字叫雷雷();
            i.GetIntFun();
            i.GetIntFunVirtual();
            i.GetStrFun();

            我是一个类名字叫小雷 xl = new 我是一个类名字叫小雷();
            xl.GetIntFun();
            xl.GetIntFunVirtual();

            Console.ReadKey();

        }
    }

x

原文地址:https://www.cnblogs.com/love-zf/p/9321057.html

时间: 2024-08-22 13:32:59

基础知识系列?接口的显示实现和隐式实现的相关文章

接口的显示实现和隐式实现一点笔记

隐式实现 不知道成员的归属 显示实现 显示指定成员的归属(通过 接口名.成员 ) 显式实现避免了成员归属混淆不清的情况,特别是多个接口中有相同的成员,或者接口中成员和类自己的成员冲突的情况. 隐式实现 public interface IBaseInterface1 { void Method1(); void Method2(); } public interface IBaseInterface2 { void Method1(); void Method2(); } public clas

线程基础知识系列(三)线程的同步

本文是系列的第三篇,前面2篇,主要是针对单个线程如何管理,启动等,没有过多涉及多个线程是如何协同工作的. 线程基础知识系列(二)线程的管理 :线程的状态,控制,休眠,Interrupt,yield等 线程基础知识系列(一)线程的创建和启动  :线程的创建和启动,join(),daemon线程,Callable任务. 本文的主要内容 何谓线程安全? 何谓共享可变变量? 认识synchronized关键字 认识Lock synchronized vs Lock 1.何谓线程安全 多线程是把双刃剑,带

线程基础知识系列(四)线程的同步2 线程通信和Condition变量

本文是系列的第四篇. 线程基础知识系列(三)线程的同步  :同步控制,锁及synchronized 线程基础知识系列(二)线程的管理 :线程的状态,控制,休眠,Interrupt,yield等 线程基础知识系列(一)线程的创建和启动  :线程的创建和启动,join(),daemon线程,Callable任务. 第三篇文章,重点阐述了如何使用锁和同步块对线程间共享可变变量保护,保证只有一个线程可以进入临界区.其实,没有过多的涉及另一个重要的同步概念:线程协作.第三篇中涉及的线程间并没有有效的协调.

MVVM设计模式基础知识--INotifyPropertyChanged接口

在.NET平台上,数据绑定是一项令人十分愉快的技术.利用数据绑定能减少代码,简化控制逻辑. 通常,可以将某个对象的一个属性绑定到一个可视化的控件上,当属性值改变时,控件上的显示数据也随之发生变化.要实现这一功能,只需要为自定义对象实现 INotifyPropertyChanged 接口即可.此接口中定义了 PropertyChanged 事件,我们只需在属性值改变时触发该事件即可. INotifyPropertyChanged 接口是 WPF/Silverlight 开发中非常重要的接口, 它构

线程基础知识系列(二)线程的管理

本篇是线程基础知识系列的第二篇,主要简单江夏线程管理相关知识点. 线程基础知识系列(一)线程的创建和启动:说明了线程的2种创建和启动,join(),daemon线程,Callable 任务. 本文的主要内容 线程的状态 线程的优先级 sleep vs wait 线程的流程控制 Interrupt yield让出你的CPU 1.线程的状态 以<线程基础知识系列(一)线程的创建和启动>这张图,是程序的运行时线程信息截图.有main线程,user Threads,daemon Threads.现在咱

线程基础知识系列(五)认识volatile

线程基础知识系列(四)线程的同步2  :线程的notify-wait通信机制,以及Condition条件变量 线程基础知识系列(三)线程的同步  :同步控制,锁及synchronized 线程基础知识系列(二)线程的管理 :线程的状态,控制,休眠,Interrupt,yield等 线程基础知识系列(一)线程的创建和启动  :线程的创建和启动,join(),daemon线程,Callable任务. 本篇文章主要讨论的关键字是volatile. volatile使用场景 volatile介绍 vol

Intent 的显示意图和隐式意图

Intent是意图,四大组件之间的通讯通过Intent来完成分为显示意图与隐式意图. Intent的显示意图很好理解就是指定好要跳转的界面: 可以通过putExtra传递不同类型的信息,以上只是一些例子.然后在SecondActivity接收这些信息就可以了: int类型与boolean类型接收时要写默认收到的信息即未收到时显示的,要注意与传递的信息区分开. Intent的隐式意图与显示意图相反,它不指定跳转的界面,是根据设置action的值来跳转,只要与设置的action值匹配就行: 然后在清

selenium 的显示等待和隐式等待的区别(记录加强版)

什么是显示等待和隐式等待? 显示等待就是有条件的等待隐式等待就是无条件的等待 隐式等待 当使用了隐式等待执行测试的时候,如果 WebDriver 没有在 DOM 中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常,换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是 0 from selenium import webdriver browser = webdriver.Chrome() browser.implicitly_wait(10

[C# 基础知识系列]专题一:深入解析委托——C#中为什么要引入委托

转自http://www.cnblogs.com/zhili/archive/2012/10/22/Delegate.html 引言: 对于一些刚接触C# 不久的朋友可能会对C#中一些基本特性理解的不是很深,然而这些知识也是面试时面试官经常会问到的问题,所以我觉得有必要和一些接触C#不久的朋友分享下关于C#基础知识的文章,所以有了这个系列,希望通过这个系列让朋友对C#的基础知识理解能够更进一步.然而委托又是C#基础知识中比较重要的一点,基本上后面的特性都和委托有点关系,所以这里就和大家先说说委托