C# 第六篇 面向对象设计(拓展:接口)
使用interface关键字定义一个Information接口,在该接口中声明Code和Name两个属性,分别表示编号和名称;声明一个方法Showinfo,用来输出信息,代码如下:
interface Information //定义接口
{
string Code{get;set;} //编号属性及实现
string Nmae{get;set;} //名称属性及实现
void Showinfo(); //用来输出信息
}接口的实现通过类继承来实现,一个类虽然只能继承一个基类,但可以继承任意多个接口。在声明实现接口的类时,需要在继承列表中包含所实现的接口的名称,多个接口之间用逗号(,)分隔。
示例代码:使用接口模拟老师上课的场景
创建一个IPerson接口,定义姓名、年龄两个属性,定义说话、工作两个行为;再创建Student类和Teacher类,两者继承IPerson接口并重写各自的属性和行为;创建两个人peter和mike,让这两个人模拟上课的场景,代码如下:
interface IPerson //定义IPerson接口
{
string Name { get; set; } //姓名属性
int Age { get; set; } //年龄属性
void Speek(); //说话行为
void Work(); //工作行为
}
class Student: IPerson
{
public string Name { get; set; } //实现姓名属性
private int age; //定义age字段,用来表示年龄
public int Age // 实现年龄属性
{
get
{
return age;
}
set
{
if (age > 0 && age < 120) //控制输入范围
{
age = value;
}
}
}
public void Speek() //实现Speek方法
{
Console.WriteLine(Name + ":老师好");
}
public void Work() //实现Work方法
{
Console.WriteLine(Name + "同学开始记笔记");
}
}
class Teacher : IPerson
{
public string Name { get; set; } //实现姓名属性
private int age; //定义age字段,用来表示年龄
public int Age // 实现年龄属性
{
get
{
return age;
}
set
{
if (age > 0 && age < 120) //控制输入范围
{
age = value;
}
}
}
public void Speek() //实现Speek方法
{
Console.WriteLine(Name + ":同学们好");
}
public void Work() //实现Work方法
{
Console.WriteLine(Name + "老师开始上课");
}
}
class Program
{
static void Main(string[] args)
{
//使用派生类对象创建接口数组
IPerson[] person = new IPerson[] { new Student(), new Teacher() };
person[0].Name = "peter";
person[0].Age = 20;
person[1].Name = "mike";
person[1].Age = 40;
person[0].Speek();
person[1].Speek();
Console.WriteLine();
person[1].Work();
person[0].Work();
Console.ReadLine();
}
}第3行代码和第4行代码定义接口中的属性,这里并不会自动实现属性,只是提供了 get访问器和set访问器,因此在派生类中可以使用自动实现属性的方式实现这两个属性。
在C#中实现接口成员(显式接口成员实现除外)时,必须添加public修饰符,不能省略或添加其他修饰符。
在上面的示例中只继承了一个接口,接口还可以多重继承,在使用多重继承时,要继承的接口之间用逗号(,)分隔。例如,下面代码继承3个接口。
interface ITest1
{}
interface ITest2
{}
interface ITest3
{}
class Test:ITest1,ITest2,ITest3
{
//接口实现
}
