c#接口和抽象类对比学习

简介:

什么是接口?

接口就是一种规范,协议(*),约定好遵守某种规范就可以写通用的代码。

定义了一组具有各种功能的方法。接口描述的是一种能力,具有这种能力的事物可以没任何关系。比如:

public interface  IFly{void fly();}

实现这个接口的可以是飞机,鸟等,他们都有飞的能力但没什么关系。而抽象类就不同了。

接口解决了类的多继承的问题

     接口解决了类继承以后体积庞大的问题。

     接口之间可以实现多继承

接口中的成员必须不能有实现(没实现说白了就是不能有大括号哦),接口不能实例化。

接口中的成员不能有访问修饰符,隐式公开public

接口中可以有属性、方法、索引器等(其实都是方法,可以用Reflector反编译看),但不能有字段

接口中的所有成员必须被子类中全部实现

接口的特点总结

   1.接口是一种规范。为了多态。

   2.接口不能被实例化。

   3.接口中的成员不能加“访问修饰符”,接口中的成员访问修饰符为public,

     不能修改。(默认为public)

   4.接口中的成员不能有任何实现(“光说不做”,只是定义了一组未实现的成员)。

   5.接口中只能有方法、属性、索引器、事件,不能有“字段”。

   6.接口与接口之间可以继承,并且可以多继承。

   7.实现接口的子类必须实现该接口的全部成员。

   8.一个类可以同时继承一个类并实现多个接口,如果一个子类同时继承了父类A,

     并实现了接口IA,那么语法上A必须写在IA的前面。class MyClass:A,IA{},因为类是单继承的。

   9.当一个抽象类实现接口的时候,如果不想把接口中的成员实现,可以把该成员实现为abstract。(抽象类也能实现接口,用abstrac标记)

   10.“显示实现接口”,只能通过接口变量来调用(因为显示实现接口后成员为private)。

 

在编程时:

   接口→抽象类→父类→具体类(在定义方法参数、返回值、声明变量的时候能用抽象就不要用具体。)

   能使用接口就不用抽象类,能使用抽象类就不用类,能用父类就不用子类。

   避免定义“体积庞大的接口”、“多功能接口”,会造成“接口污染”。只把相关联的一组成员定义到一个接口中(尽量在接口中少定义成员)。单一职责原则

   定义多个职责单一的接口(小接口)(组合使用)。

抽象类和接口的区别

接口定义类的公共行为,抽象类定义类的公共实现

一个类只能继承自一个类(抽象类),但是可以同时实现多个接口

接口中不能有实现,抽象类中可以有未实现成员也可以有实现的成员

接口中未实现的方法必须在子类中实现,抽象类中未实现的成员必须在子类中重写

好的接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。

如果一个类只是实现了这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染。  如: 

 

复制代码
 1   Public interface  IFly
 2 
 3  4 
 5     void fly();
 6 
 7      void eat();
 8 
 9 10 
11 Class Plane:IFly
12 
13 {
14 
15     //类实现了接口,必须实现它的所有未实现的成员,所以飞机必须也得有eat的方法。如果您说飞机吃油,那也没办法。
16 
17      void fly(){…};
18 
19        void eat(){…..};
20 }
复制代码

 

什么时候使用抽象类,什么时候使用接口

抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。

 

博客地址: http://www.cnblogs.com/wolf-sun/
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。http://www.cnblogs.com/wolf-sun/p/3253179.html

相关文章
|
25天前
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
|
2月前
|
C#
C# 接口(Interface)
接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同 "是什么" 部分,派生类定义了语法合同 "怎么做" 部分。 接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构。 接口使得实现接口的类或结构在形式上保持一致。 抽象类在某种程度上与接口类似,但是,它们大多只是用在当只有少数方法由基类声明由派生类实现时。 接口本身并不实现任何功能,它只是和声明实现该接口的对象订立一个必须实现哪些行为的契约。 抽象类不能直接实例化,但允许派生出具体的,具有实际功能的类。
49 9
|
2月前
|
开发框架 缓存 算法
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
|
7月前
|
C#
C#的基本语法结构学习
【5月更文挑战第17天】C#基础语法包括变量(如`int x = 10`)、常量(`const int MAX_VALUE = 100`)、运算符(如算术和比较运算符)、控制语句(if、for、while等)和函数声明(`int Add(int x, int y) { return x + y; }`)。这些构成C#程序的基本元素。
79 0
|
3月前
|
Linux C# 开发者
Uno Platform 驱动的跨平台应用开发:从零开始的全方位资源指南与定制化学习路径规划,助您轻松上手并精通 C# 与 XAML 编程技巧,打造高效多端一致用户体验的移动与桌面应用程序
【9月更文挑战第8天】Uno Platform 的社区资源与学习路径推荐旨在为初学者和开发者提供全面指南,涵盖官方文档、GitHub 仓库及社区支持,助您掌握使用 C# 和 XAML 创建跨平台原生 UI 的技能。从官网入门教程到进阶技巧,再到活跃社区如 Discord,本指南带领您逐步深入了解 Uno Platform,并提供实用示例代码,帮助您在 Windows、iOS、Android、macOS、Linux 和 WebAssembly 等平台上高效开发。建议先熟悉 C# 和 XAML 基础,然后实践官方教程,研究 GitHub 示例项目,并积极参与社区讨论,不断提升技能。
104 2
|
3月前
|
C# 索引
C# 一分钟浅谈:接口与抽象类的区别及使用
【9月更文挑战第2天】本文详细对比了面向对象编程中接口与抽象类的概念及区别。接口定义了行为规范,强制实现类提供具体实现;抽象类则既能定义抽象方法也能提供具体实现。文章通过具体示例介绍了如何使用接口和抽象类,并探讨了其实现方式、继承限制及实例化差异。最后总结了选择接口或抽象类应基于具体设计需求。掌握这两者有助于编写高质量的面向对象程序。
125 5
|
4月前
|
API C# 数据库
SemanticKernel/C#:实现接口,接入本地嵌入模型
SemanticKernel/C#:实现接口,接入本地嵌入模型
90 1
|
4月前
|
C#
C# 面向对象编程(三)——接口/枚举类型/泛型
C# 面向对象编程(三)——接口/枚举类型/泛型
36 0
|
4月前
|
开发框架 .NET API
C#/.NET/.NET Core推荐学习书籍(24年8月更新)
C#/.NET/.NET Core推荐学习书籍(24年8月更新)
|
5月前
|
Dart 算法 JavaScript
C#数据结构与算法入门教程,值得收藏学习!
C#数据结构与算法入门教程,值得收藏学习!