TUhjnbcbe - 2025/6/2 22:04:00
C#核心开发-第15单元-接口和继承-第4节:接口C#核心开发-接口1.接口基本概念在现实生活当中,有许多与接口相关的现象,如各大银行的取款机,插银行卡的卡口规格都是一样的,这样各大银行的银行卡相互之间都可以使用,中国银行的卡可以在建设银行的取款机上取钱。这个取款机上的卡口就称为接口,它只定义一些规范,如长/宽/高是多少,深度是多少,读取银行卡芯片的逻辑是什么等,定义好规范之后,各大银行按此规格生产自己的取款机即可。在C#编程中,我们经常也会用到接口,那什么是C#中的接口呢?C#接口描述的是可属于任何类或结构的一组相关功能规范,与取款机的卡口是一样的,也是定义一些规范,没有具体实现的代码。2.定义接口C#接口主要是用来让继承的,其它的子类继承接口,来实现接口中定义的规范。在C#中,接口使用interface关键字进行定义:C#中定义接口-图2VS为接口定义了模板,我们在图1的“添加新项”中选择“接口”,然后输入接口的名称IPerson,接口的命名一般都是以大写的字母I开头。定义的接口代码-图3从图3上可以看到,接口文件与类文件一样,都是以*.cs扩展名结尾的。但是接口是以interface关键字定义的:C#接口是使用interface定义的-图4C#创建IPerson接口代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceYidosoft.Edu.Csharp.Inherit{interfaceIPerson{}}3.接口中添加方法签名在C#接口中添加最多的成员就是方法签名,为什么是方法签名呢?是因为接口只是定义规范,不实现具体的代码。在C#接口中定义签名-图5在图5中,我们发现,定义的所有方法签名都没有访问修饰符,为什么不能指定接口中方法签名的修饰符呢?在C#接口中编写的签名如下:namespaceYidosoft.Edu.Csharp.Inherit{interfaceIPerson{voidAdd(stringname,intsum,doubleprice);stringList(stringid);doubleTotal(doubleamount,intcount=0);}}C#接口中的方法用来定义对象之间通信的契约,指定接口中的方法为私有或保护没有意义,它们默认为公有方法。C#接口本身就是供继承它的子类使用其中成员的,所以默认就是公开的,大家都可以使用。4.实现接口定义的签名C#接口中的方法签名规范好后,就可以让子类继承它,并实现具体的代码:子类继承接口-图6子类继承接口C#代码如下:namespaceYidosoft.Edu.Csharp.Inherit{publicclassDeveloper:IPerson{}}在图6中,我们创建了一个名称为Developer的类,并让该类继承IPerson接口,当继承接口后,接口名称上划有红色的波浪线,表示有错误:VS给出的实现接口提示-图7在图7中,当我们将光标放在IPerson接口上后,出现了3个提示信息,说不实现接口成员xxx,点开小灯泡:VS帮我们实现接口-图8在图8中点击“实现接口”,如图9所示:VS给出的实现代码-图9VSIDE真的好强大,基本的方法实现全帮我们编写好了,我们只需要编写业务逻辑代码即可。因为图9中的这些都是硬性规定与接口中的方法签一致,所以没有必要让开发者一个一个的编写出来。因此,实现C#接口的类或结构必须实现接口定义中指定的接口成员。现在编写一些具体的方法实现:编写C#实现代码-图10在图10中,我们对接口中的3个方法签都实现了具体代码,且具有自己的逻辑功能代码。在子类中实现接口的具体C#代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceYidosoft.Edu.Csharp.Inherit{publicclassDeveloper:IPerson{publicvoidAdd(stringname,intsum,doubleprice){Console.WriteLine($name:{name},sum:{sum},price:{price});}publicstringList(stringid){return$Id:{id};}publicdoubleTotal(doubleamount,intcount=0){returnamount*count;}}}在软件项目中,使用接口的好处是,要求某个模块内的所有类都要继承接口,从而不让类胡乱的实现功能,而是按接口要求实现。现在调用一下具体实现:调用C#子类中的成员-图11在图11中,我们看到了实现的所有方法,并且是可以正常使用的。实例化子类并调用方法-图12对于继承了C#接口的类,也可以使用接口类型接收:C#接口可接收子类对象-图13因为Developer是继承IPerson接口的,所以可以将Developer对象转换为IPerson接口类型。调用继承了C#接口子类的成员代码如下:IPersonperson=newDeveloper();person.Add(iMac,,);stringstr=person.List();doubletotal=person.Total(.99,);//--------------------------------------------Developerdeveloper=newDeveloper();developer.Add(iMac,,);stringstr=developer.List();doubletotal=developer.Total(.99,);C#接口具有如下特性:(1).接口类似于基类,不能直接实例化接口。(2).接口不能包含常量、字段、运算符、实例构造函数、不能包含静态成员。(3).接口成员是自动公开的,且不能包含任何访问修饰符。(4).接口自身可从多个接口继承,类和结构可继承多个接口,但接口不能继承类。C#深入编程-线上视频图文课堂配套课后技能作业+理论考试+源码淘宝¥购买已下架