隐式实现接口
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(); }
打印结果如下:
显式实现接口,这个接口的方法,只能通过接口变量来调用。