欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c#基础 接口

程序员文章站 2022-06-13 21:02:24
...

接口可以理解为对一组方法声明进行的统一命名。但是这些方法没有提供任何实现,也就是说,把一组方法声明在一个接口中,然后继承与该结构的类都需要实现这些方法。

通过接口你可以对方法进行统一管理,避免了在每一种类型中重复定义具有相同功能的方法。

接口的定义

接口中定义方法不能添加任何访问修饰符,默认公有,使用interface关键字,定义的方法与类类似。

public interface IShow
{
      void print();
}

在接口中的定义方法不能添加任何访问性修饰符,默认为公有,添加之后会报错。

除了方法在接口中还可以定义

  1. 事件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# 接口