* 接口是一种规范,为了实现多态
* 接口不能被实例化
* 接口中的所有成员都不能添加任何的访问修饰符,默认的是public
* 接口中不能包含任何的实现,光说不做,只是定义了一组未实现的成员
* 接口只能包括方法,属性,事件,索引器(其实这些都是方法)
* 接口与接口之间可以继承,并且可以多继承
* 实现接口的子类必须实现该接口的所有成员
* 当一个抽象类继承了接口的时候,如果不想把接口中的成员实现,可以把该成员实现为abstract
* 显示实现接口,只能通过接口变量来调用,应为显示实现的成员访问修饰符为private
*/
接口的成员
/// <summary>
/// 接口,这里命名不规范,随便写的
/// </summary>
public interface Class1
{
/// <summary>
/// 接口里的成员不能有访问修饰符
/// 一个类只能继承一个类,类继承的单根性
/// 但是一个类可以实现多个接口,接口的多实现
///
/// 接口解决了不同类型之间的多态的问题
/// 比如鱼和船,他们属于不同的类,没法抽象出一个父类,但是他们都可以在水里游,只是方式不同
/// 要实现他们的多态,就可以考录使用接口,定义一个游的接口,然后让鱼和穿去实现它,从而实现船和鱼的不同游泳方式
/// </summary>
void SayHi();
/// <summary>
/// 在接口里面这表示一个未实现的属性
/// </summary>
string Name
{
get;
set;
}
/// <summary>
/// 索引器
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
string this[int index]
{
get;
set;
}
}
/// <summary>
/// 实现接口
/// </summary>
public class Person : Class1
{
/// <summary>
/// 实现方法SayHi
/// </summary>
public void SayHi()
{
throw new NotImplementedException();
}
/// <summary>
/// 实现属性Name
/// </summary>
public string Name
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
/// <summary>
/// 实现索引器
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public string this[int index]
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
}
一个类实现了接口并且实现了该接口的所有成员
这个类的子类也去实现该接口,比不实现该接口效率要高
/// <summary>
/// 定义一个接口类
/// </summary>
public interface IPerson
{
void SayHi();
}
/// <summary>
/// 定义一个学生类,实现接口,并且实现接口汇总所有的成员
/// </summary>
public class Student : IPerson
{
public void SayHi()
{
Console.WriteLine("我是个学生");
}
}
/// <summary>
/// 定义一个三号学生类,继承学生类
/// 如果一个类Student实现一个接口IPerson并且实现了该接口所有的成员
/// 这个类Student的子类GoodStudent由于继承了父类Student的方法,所以可以直接使用父类实现的方法(如这种写法:GoodStudent : Student)
/// 这样写是正确的,使用是完全没有问题的
///
/// 但是为了提高效率,我们可以直接让这个类的子类也实现父类已经实现的接口(如:GoodStudent : Student,IPerson)
/// 这是后应为父类已经实现了该接口的所有成员,所以子类不必再去实现接口的成员
/// 而且在使用多态的时候,应为查询到子类实现了接口,则可以直接转换
/// 如果子类没有实现接口,则子类需要转换成父类,然后再转换成接口类
/// 虽然两种方式都可以,但是子类实现接口之后会提高效率
/// </summary>
public class GoodStudent : Student,IPerson
{
}