c#基础 接口
接口可以理解为对一组方法声明进行的统一命名。但是这些方法没有提供任何实现,也就是说,把一组方法声明在一个接口中,然后继承与该结构的类都需要实现这些方法。
通过接口你可以对方法进行统一管理,避免了在每一种类型中重复定义具有相同功能的方法。
接口的定义
接口中定义方法不能添加任何访问修饰符,默认公有,使用interface关键字,定义的方法与类类似。
public interface IShow
{
void print();
}
在接口中的定义方法不能添加任何访问性修饰符,默认为公有,添加之后会报错。
除了方法在接口中还可以定义
- 事件2.属性3.索引器 或者这四类的组合
1.字段2.运算符重载3.构造函数4.析构函数 不能使用static关键字
接口的继承
继承接口就要继承接口中的所有方法。继承方式与类一样使用 :
调用 接口中的方法
1、 隐式实现 即不指定是哪个接口的方法。单继承,或多继承的接口中没有同名方法
2、 显式继承 在实现过程中,明确指出实现哪一接口中的哪一方法,当多个接口中包含同名方法时,相同返回值类型,和相同参数时,如果一个类同时实现了这些接口,隐式实现接口中的方法就会出现命名冲突的问题。
显示实现接口中的方法时需要注意:
1、 若显式实现接口,方法不能使用任何访问修饰符。显式实现的成员默认为私有。
2、 显式实现的成员默认是私有,所以这些成员不能通过对象直接访问,此时正确的访问方式是把speaker对象显式的转换为对应的接口,通过接口来访问方法。
3、 当类实现单个接口时,通常使用隐式接口方式,因为对象可以直接访问接口方法。
4、 实现多个接口时,一般推荐使用显式实现的方式。
接口与抽象类
1、 抽象类使用abstract关键字进行定义,接口使用interface进行定义,他们都不能实例化。
2、 抽象类可以包含虚方法、非抽象方法和静态成员;但接口不能包含虚方法和任何静态成员,并且接口中只能定义方法,不能有具体实现。也不能与字段。
3、 抽象类不能实现多继承,接口支持多继承。
4、 抽象类本质是一个类;接口只是带便实现类具有接口声明的方法,是一中can-do关系。
ps:抽象类中的方法,可以不重写,但是接口中的方法必须继承并实现。
类无法实现多继承,但是接口可以实现多继承
//不同类型中出现的相同方法,就声明在接口中
//ps:都有相同的功能,但是有不同的表现形式,但是相同的功能要形成一种规范,避免重复定义,所以才用的接口
//显式实现的接口,调用时将p对象类型转换成对应的接口
((IInterface1)p).print();
//将对象赋值给对应的接口引用
IInterface1 i1 = p;
//如果继承的两个接口中方法同名了,就要显示实现接口
public classPerson:IInterface1,IInterface2
{
//显式实现接口,实现方法时在方法名前指定是哪个接口的方法
//显式实现接口时,方法前不要加public
// 子类想重新写一个与父类中的接口方法同名的方法,需要加new关键字覆盖掉该方法
//但是依然可以像继承类那样,使用虚方法重写
public class Student:Person
{
public new void SayHello()
{
Console.WriteLine("stu");
}
}
//继承 子类中拥有父类所有的 字段和方法。如果有一个成员不是子类需要的就不能用继承。有了接口之后,可以将
//所有子类都需要的字段或者方法用继承来实现。而个别子类才需要的方法可以定接口来实现,需要该方法的类就继承该
//接口,不需要的就不继承该接口
只要是继承,子类继承父类或接口的方法就一定要返回值,方法名,参数列表相同。
实质不是继承了接口中的方法,只是继承了,接口中方法的书写规范,所以就和普通的类中的普通方法一样,可以被继承,可以写成虚方法被重写。
上一篇: (C# 基础) 接口