zoukankan      html  css  js  c++  java
  • 接口的显式实现(转)

    隐式实现接口

    复制代码
    interface IRunable
        {
            //规范子类必须实现strName属性
            string strName { get; set; }
            //规范子类必须实现Run()方法
            void Run();
    
        }
    
        class Student:IRunable
        {
            //这里是子类的字段
            string strname;
            public string strName
            {
                get
                {
                    return strname;
                }
                set
                {
                    strname = value;
                }
            }
    
            public void Run()
            {
                Console.WriteLine("我是小学生,我在学校里面跑步!");
            }
    
    
        }
    复制代码


    显式实现接口

    复制代码
     class Student:IRunable
        {
            //这里是子类的字段
            string strname;
            //显示实现接口
            string IRunable.strName
            {
                get
                {
                    return strname;
                }
                set
                {
                    strname = value;
                }
            }
    
            void IRunable.Run()
            {
                Console.WriteLine("我是小学生,我在学校里面跑步!");
            }
    
        }
    复制代码


    显示的实现接口是为了解决方法名冲突的问题。但是显示实现接口会出现,在上面的代码中会出现一个问题,如下图:

    为什么会这样呢?

    因为显式实现接口的方法是私有的,不能通过对象变量来调用。那应该怎么调用呢,看下面的代码:

    复制代码
    class Program
        {
            static void Main(string[] args)
            {
               
    
                //里氏替换原则,父类变量指向子类对象,并通过父类变量调用子类方法
                IRunable ir = new Student();
                ir.Run();
                Console.ReadKey();
            }
        }
    
        interface IRunable
        {
            //规范子类必须实现strName属性
            string strName { get; set; }
            //规范子类必须实现Run()方法
            void Run();
    
        }
    
        class Student:IRunable
        {
            //这里是子类的字段
            string strname;
            //显示实现接口
            string IRunable.strName
            {
                get
                {
                    return strname;
                }
                set
                {
                    strname = value;
                }
            }
    
            void IRunable.Run()
            {
                Console.WriteLine("我是小学生,我在学校里面跑步!");
            }
    
           // Student s = new Student();
          
    
        }
    复制代码

    打印结果如下:

    显式实现接口,这个接口的方法,只能通过接口变量来调用。

  • 相关阅读:
    AcWing 1018. 最低通行费
    蓝桥杯赛第10届省赛
    P5745 【深基附B例】区间最大和
    P3383 【模板】线性筛素数
    第12届蓝桥杯赛国赛 小蓝买瓜子
    P4715 【深基16.例1】淘汰赛
    AcWing 1015. 摘花生
    第12届蓝桥杯赛省赛 种菜的最大价值
    linq to sql初步
    汇编语言学习笔记接收鼠标消息
  • 原文地址:https://www.cnblogs.com/KevinG/p/3553669.html
Copyright © 2011-2022 走看看