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