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 { //接口实现 }