接口的显式实现(转)

隐式实现接口

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

    }
复制代码

打印结果如下:

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

posted @ 2014-02-18 09:29  阿樂  阅读(257)  评论(0编辑  收藏  举报