接口使类更加规范
接口具有下列属性:
接口类似于抽象基类:实现接口的任何非抽象类型都必须实现接口的所有成员。
不能直接实例化接口。
接口可以包含事件、索引器、方法和属性。
接口不包含方法的实现。
类和结构可继承多个接口。
接口自身可从多个接口继承。
例如:- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace vs1.test
- {
- class Program
- {
- static void Main(string[] args)
- {
- //People p = new People("zs");//不能创建接口实例
- People peMan = new Man();
- People peWomen = new Women();
- //peMan.name = "xiaoming";
- peWomen.Name = "zhangsan";
- peMan.Speak();
- peWomen.Speak();
- //peMan.GanHuo(); 不存在
- //peWomen.FengYiFu();不存在
- Console.WriteLine(peMan.Name);
- Console.WriteLine(peWomen.Name);
- //peWomen[1]; 索引器也无法使用
- //peMan[1]; 索引器也无法使用
- Women woWomen = new Women();
- woWomen.FengYiFu();
- woWomen.Name = "lis";
- woWomen.Speak();
- Console.WriteLine(woWomen[1, "xiaobai"]);
- Console.ReadKey();
- }
- }
- interface People
- {
- //public People(string name) { this.name = name; } //接口不能包含构造函数
- //private string name; //接口不能包含字段
- string Name //public修饰符不能用
- {
- set;
- get;
- }
- void Speak(); //public修饰符不能用
- //{
- // Console.WriteLine("interface Speak()"); //方法体不能定义
- //}
- string this[int index, string name] //public修饰符不能用
- {
- get;
- //set;
- }
- }
- class Man : People
- {
- public string Name { set; get; } //必须要实现接口的属性
- public void Speak() //必须要实现接口的方法
- { Console.WriteLine("Man Speak()"); }
- public void GanHuo()
- {
- Console.WriteLine("男人干累活");
- }
- public string this[int index,string name] //必须要实现接口的索引器
- {
- //set { this.Name = name; } //至少要有一个访问器
- get { return Name; }
- }
- }
- class Women : People
- {
- public string Name { set; get; }
- public void Speak() { Console.WriteLine("Women Speak()"); }
- public void FengYiFu()
- {
- Console.WriteLine("女人逢衣服");
- }
- public string this[int index,string name]
- {
- //set { this.Name = name; }
- get { return Name; }
- }
- }
- }
复制代码 所有实现接口的类必须要重写接口中的内容,要求方法名和签名必须一致
|