C# 接口

news/2024/7/7 19:05:36

1.接口的特点

  接口的定义是指定一组函数成员而不实现成员的引用类型,其它类型和接口可以继承接口。定义还是很好理解的,但是没有反映特点,接口主要有以下特点:

(1)通过接口可以实现多重继承,C#接口的成员不能有public、protected、internal、private等修饰符。原因很简单,接口里面的方法都需要由外面接口实现去实现方法体,那么其修饰符必然是public。C#接口中的成员默认是public的,java中是可以加public的。

(2)接口成员不能有new、static、abstract、override、virtual修饰符。有一点要注意,当一个接口实现一个接口,这2个接口中有相同的方法时,可用new关键字隐藏父接口中的方法。

(3)接口中只包含成员的签名,接口没有构造函数,所有不能直接使用new对接口进行实例化。接口中只能包含方法、属性、事件和索引的组合。接口一旦被实现,实现类必须实现接口中的所有成员,除非实现类本身是抽象类

(4)C#是单继承,接口是解决C#里面类可以同时继承多个基类的问题。

2.接口的简单使用

复制代码
 class Program{static void Main(string[] args){IWorker james1 = new James1();IWorker james2 = new James2();james1.work("设计");james2.work("编程");//从这个例子我体会到了有接口的好处,可以想象如果又来了新的员工。//如果不采用接口,而是每个员工都有一个单独的类,这样就会容易出错。//如果有接口这种协议约束的话,那么只要实现了接口就肯定有接口里声明的方法,我们只需拿来调用。}}public interface IWorker{ void work(string s); }class James1 : IWorker{public void work(string s){Console.WriteLine("我的名字是James1,我的工作是" +s);}}class James2 : IWorker{public void work(string s){Console.WriteLine("我的名字是James2,我的工作是"+s);}}
复制代码

3.一个可以实例化接口的特例

复制代码
    class Program{static void Main(string[] args){//C#中COM接口是可以实例化的,但其实这种写法是使接口“映射”到某一个类上,实际上创建的是这个类的实例。IWorker worker = new IWorker();}}[ComImport, CoClass(typeof(James1))][Guid("d60908eb-fd5a-4d3c-9392-8646fcd1edce")]public interface IWorker{ void work(string s); }//ComImport特性发生在tlbimp.exe导入COM类型类库的时候,生成的托管类型会标记有ComImport特性//Guid特性是一个GUID标识,COM类型是用GUID来标识的。
复制代码

利用.NET Reflector查看时可以很明显的看到Main方法里面的代码是:IWorker worker=new James1();

 4.接口和抽象类的区别

接口用于规范,抽象类用于共性。抽象类是类,所以只能被单继承,但是接口却可以一次实现多个。
接口中只能声明方法,属性,事件,索引器。而抽象类中可以有方法的实现,也可以定义非静态的类变量。
抽象类可以提供某些方法的部分实现,接口不可以。抽象类的实例是它的子类给出的。接口的实例是实现接口的类给出的。
在抽象类中加入一个方法,那么它的子类就同时有了这个方法。而在接口中加入新的方法,那么实现它的类就要重新编写(这就是为什么说接口是一个类的规范了)。
接口成员被定义为公共的,但抽象类的成员也可以是私有的、受保护的、内部的或受保护的内部成员(其中受保护的内部成员只能在应用程序的代码或派生类中访问)。此外接口不能包含字段、构造函数、析构函数、静态成员或常量。

  还有一点,我们在VS中实现接口时会发现有2个选项,一个是实现接口,一个是显示实现接口。实现接口就是我们平常理解的实现接口,而显示实现接口的话,实现的方法是属于接口的,而不是属于实现类的。

 

转载于:https://www.cnblogs.com/lwjcn/p/8521381.html


http://lihuaxi.xjx100.cn/news/237396.html

相关文章

从 PoS 进化 SPoS:无能耗共识机制

链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 从 PoS 进化 SPoS:无能耗共识机制 我们为 V SYSTEMS 区块链平台设计了了一个注重高扩展性的权益证明(PoS&#xff…

23岁一无所有怎么办_我搬到国外去创业,然后一无所有。

23岁一无所有怎么办以我的名字还不到一美元,它仍然感觉不像是最低点。 (With not even a dollar to my name, it still didn’t feel like rock bottom.) When you tell someone you’re working for a startup, they’ll either think you’re gonna be really ric…

中国电信打造“三朵云”战略 助力互联网+医疗发展

随着云计算、大数据的快速发展,全行业上云成为一个趋势,在健康医疗这个领域,应大势之趋,纷纷构建医疗云。近日,中国电信医疗云专区北京节点发布会在京顺利召开,会后北京电信副总经理项煌妹接受了中国IDC圈记…

jquery学习心得

$("p").click(function(){ $(this).hide(); }); 这个hide相当于$(this).css("display", "none"); 标签区域也不显示 转载于:https://www.cnblogs.com/lelezhangzhao/p/9429667.html

区块链技术的标准化和颠覆性

链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 区块链技术的标准化和颠覆性 区块链技术的实施是企业财务战略上的明智之举。它不仅在加密货币方面,而且在数据标准化软件方面&…

入门系列之使用fail2ban防御SSH服务器的暴力破解攻击

欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 本文由SQL GM 发表于云社区专栏 介绍 对于SSH服务的常见的攻击就是暴力破解攻击——远程攻击者通过不同的密码来无限次地进行登录尝试。当然SSH可以设置使用非密码验证验证方式来对抗这种攻击,例…

真实记录疑似Linux病毒导致服务器 带宽跑满的解决过程

案例描述 由于最近我在重构之前的APP,需要和server端进行数据交互,发现有一个现象,那么就是隔1~2天总会发生获取数据超时的问题,而且必须要重启服务器才能解决。早在之前,我有留意到这个问题,但是由于这个服…

深入挖掘Hyperledger Fabric中的私有数据

链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 深入挖掘Hyperledger Fabric中的私有数据 私有数据是fabric中讨论最多的特性,在v1.2中发布。它在多个参与者之间引入了数据隐私…