接口的显式实现(转)

隐式实现接口

复制代码
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();
      

    }
复制代码

打印结果如下:

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

转载于:https://www.cnblogs.com/KevinG/p/3553669.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值