C#中接口和类的异同

**

先了解一下什么叫接口?

**接口是指定一组函数成员而不实现成员的引用类型,其他类型-类和结构可以实现接口。
1、接口是一个引用类型,通过接口可以实现多重继承。
2、C#中接口的成员不能有new、public、protected、internal、private等修饰符。
3.、接口声明不包括数据成员,只能包含方法、属性、事件、索引等成员。
4、 接口名称一般都以“I”作为首字母(当然不这样声明也可以),这也是接口和类的一个区别之一;
5、接口成员的访问级别是默认的(默认为public),所以在声明时不能再为接口成员指定任何访问修饰符,否则 编译器会报错。
6、接口成员不能有static、abstract、override、virtual修饰符,使用new修饰符不会报错,但会给出警告说不需要关键字new。
7、在声明接口成员的时候,不准为接口成员编写具体的可执行代码,也就是说,只要在对接口进行声明时指明接口的成员名称和参数就可以了。
8、接口一旦被实现,实现类必须实现接口中的所有成员,除非实现类本身是抽象类(通过具体的可执行代码实现接口抽象成员的操作)。
9、接口中只能声明"抽象"成员(所以不能直接下一步对接口进行实例化(即不能使用new操作符声明一个接口的实例对 象)),而不能声明共有的域或者私有的成员变量。

先了解一下什么叫类?

类(Class)是面向对象程序设计实现信息封装的基础。类是一种用户定义类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。类是面向对象程序设计中的概念,是面向对象编程的基础。类的实质是一种数据类型,类似于int、char等基本类型,不同的是它是一种复杂的数据类型。因为它的本质是类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。类是对现实生活中一类具有共同特征的事物的抽象。如果一个程序里提供的类型与应用中的概念有直接的对应,这个程序就会更容易理解,也更容易修改。一组经过很好选择的用户定义的类会使程序更简洁。此外,它还能使各种形式的代码分析更容易进行。特别地,它还会使编译器有可能检查对象的非法使用。类的内部封装了方法,用于操作自身的成员。类是对某种对象的定义,具有行为(be-havior),它描述一个对象能够做什么以及做的方法(method),它们是可以对这个对象进行操作的程序和过程。它包含有关对象行为方式的信息,包括它的名称、方法、属性和事件。类的构成包括数据成员和成员函数。数据成员对应类的属性,类的数据成员也是一种数据类型,并不需要分配内存。成员函数则用于操作类的各项属性,是一个类具有的特有的操作,比如“人”可以“上课”,而“水果”则不能。类和外界发生交互的操作称为接口。
定义类:
class类名
{
public: 公有成员
private: 私有成员
protected: 保护成员
};
不同点:
 不能直接实例化接口。
 接口不包含方法的实现。
 接口可以多继承,类只能单继承。
 类定义可以在不同的源文件之间进行拆分。
相同点
 接口、类和结构都可以从多个接口继承。
 接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。
 接口和类都可以包含事件、索引器、属性。

类的分类有:抽象类(abstract)、密封类(sealed)、静态类(static)

抽象类(abstract):使用目的:若所有子类拥有共同的特性,可以把这个特性放到一个抽象类中,子类继承此抽象类。
特点:

  1. 不能被实例化;ClassName en=new ClassName();//这样会报错。
  2. 抽象成员必须包含在抽象类中。
  3. 抽象类除了抽象成员外,还可以包含别的成员(不用关键字 abstract)。
  4. 子类继承抽象父类后,必须把父类中的所有抽象成员都重写。除非子类也是个抽类。
  5. 抽象成员的访问修饰符不能是private。
  6. 抽象类是有构造函数,虽然不能被实例化。
  7. abstract不能用于字段成员,可定义成属性。
  8. abstract用于方法时,方法不能定义主体(内容)。
  9. 抽象类也可以实现接口,但要把接口的成员前面标记个abstract。
    密封类(sealed):使用目的:不需要子类来继承他。如 String;
    特点:
    1.不能被继承,如:string ,不能被继承。
    2.子类重写后,前面加个sealed,那么子类就不能再被继承。
    静态类(static):使用目的:不需要实例化,可以直接类名引用静态方法。比如 工具类。
    特点:
  10. 相似于sealed与abstract使用。
  11. 静态成员在整个程序退出时才释放资源,所以尽量别写静态字段、属性。最好是静态方法。

接口(interface):使用目的:抽象类所拥有的共性,也可以概括为:为了多态。

特点:
1.接口中只能包含方法。(方法、属性、索引器、事件)
2.接口中的方法不能有任何实现
3.接口中的成员不能有任何访问修饰符(哪怕是public)
4.接口不能被实例化
5.实现接口的类,必须实现接口的所有成员(这里跟抽象类一样)
6.类不能多继承,所以在某些情况下,只能用接口来代替。接口可以多实现(一个类可以继承多个接口,而只能继承一个类)
7.接口的主要目的就是为了实现多态
8.当一个类,同时继承了某个类,并且也实现了某些接口的时候,必须要将继承的类写在第一个(如果一个类同时继承了父类和接口的时候,要把父类写在最前面)
9.当多个类,都具有某个或某几个功能时(方法),但是这几个类型又不属于相同的系列(这几个类型没有共同的父类,就不能用抽象类。),所以这时,为了实现多态就可以考虑把这几个类型共有的方法提取到一个接口中,让这几个类型分别实现该接口
10.当父类实现接口,子类继承父类。那么 接口就可以引用子类
11.不要在一个接口中写过多的方法,避免造成接口污染。可编写多个接口,在每个接口中,分别定义方法
12.实现接口方法的时候,不要有override关键字,直接跟平常定义一样
13.接口方法的显示实现,如果多个接口里有相同的方法名。那么第一个方法名默认的引用的是排在最前面的接口,如果要使用后面接口的方法,就要显示实现:接口名.方法名。访问修饰符是private;

总的来说,接口和抽象类是.Net为了更好的实现类型之间继承关系而提供的语言手段,而且两者有些相辅相成的关系。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值