惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
L
LangChain Blog
WordPress大学
WordPress大学
MyScale Blog
MyScale Blog
The Cloudflare Blog
J
Java Code Geeks
Google DeepMind News
Google DeepMind News
Recent Announcements
Recent Announcements
Microsoft Azure Blog
Microsoft Azure Blog
Y
Y Combinator Blog
有赞技术团队
有赞技术团队
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
Martin Fowler
Martin Fowler
小众软件
小众软件
量子位
月光博客
月光博客
P
Proofpoint News Feed
IT之家
IT之家
腾讯CDC
博客园 - 三生石上(FineUI控件)
博客园 - 司徒正美
雷峰网
雷峰网
V
Visual Studio Blog

博客园 - Nillson

传说中的Singleton.... 设计模式--简单工厂模式 策略模式 C# 实现的一个二叉树类 回顾一个面试题 再谈代理 常见的排序方法 预定义,宏定义 连接符,数值运算与函数 复杂查询 数据库中的Index和View的理解 重载和重写 采用递归的方法获得一棵树的所有叶节点 .NET中的新概念整理 4月要看的书 System.Runtime.InteropServices浅见 挂个牛人 一篇关于如何写注释的文章,值得收藏 Vistual Studio 2005到Vistual Studio 2008的版本转换问题 Visual Studio 2008 的一个Bug
抽象类与接口
Nillson · 2008-08-14 · via 博客园 - Nillson

抽象类与接口的功能有很类似的地方,接口可以认为是一种更加"抽象"的抽象类.他们都可以认为是提供一个可被继承并重写的方法的集合,但是在C# 中他们的用法有几点差别.

抽象类是类,而接口是接口! 这句貌似是废话的话其实应该可以说明他们之间区别的根本原因了.抽象类说到底是类,只不过它包含了抽象方法,它具有一个实例类所具有的一切特征.而接口是高度抽象的类,他跟一个实例类是有很大的不同.

1.抽象类支持实例方法,这对于类来说一点都不奇怪,但是高度抽象的接口是不可能包含实例方法的.

2.抽象类无法支持多继承,这也是C# 中类的特点,但是接口则不然.

3.抽象类可以声明并使用变量,但是接口则不可以.因为它是高度抽象的.但是值得注意的一点是接口中允许有抽象的属性,因为属性是方法而不是变量.

4.抽象类的方法允许有多种访问修饰符,这也是类的特征,但是接口默认的访问修饰符都是public而且在C# 语法中,接口成员之前的修饰符是不容许出现的,即便是public也不例外,这个道理也很简单,接口中的方法都是虚拟的,如果无法被其他类来继承并重写,这个方法就永远无法被使用到,声明这样的一个方法根本就是画蛇添足的.

5.抽象类可以定义构造函数,但是接口则不可以.这个可以从两方面来理解,接口中不允许有实例方法,而构造函数必须是实例方法;接口中的方法都是虚拟的,即便是有一个构造函数,它的作用又来构造谁呢?