C#中接口为"其他方面互不相干"的类型提供公共的服务和特征;C#中class只支持但继承,使用接口却支持多继承,例如:C#中System.String是从System空间中的4个interface继承而来。
public sealed class String:ICompare,ICloneable,ICovertible,IEnumerable;C#中对class使用sealed关键字修饰,代表这个类不能够被在其他类继承。

接下来描述一下2者的区别:

1.两者表达的概念不一样,抽象类是一类事物的高度聚合,那么继承子类相对这个抽象类来说是一种"是"的关系,接口是定义行为的规范,因此实现接口的类相对于接口来说,"是行为需要按照接口来完成"。举个例子,花是所有花类的统称,牡丹是花,玫瑰是花,那么花相对牡丹和玫瑰来说是抽象类。而对于发出香味这一动作来说,香水也会发出香味。前者就是所说的抽象类,后者就是所说的接口。

2.抽象类在定义类型方法时候,可以给出实现部分,也可以不给出实现部分,而对于接口来说,其中所有的定义都不给出实现部分,例如:

public abstract DemoClass
{
public virtual void VirtualTest()
{
Console.WriteLine("This is a virtual function");
} public abstract void AbstractTest();
} public interface IDemoInterface
{
void InterFaceTest();
void InteFaceDemo();
}

3.继承类对于2者所涉及的方法的实现是不同的。继承类对于抽象类所定义的抽象方法可以不需要重写,也就是说可以沿用抽象类的 方法,而对于接口来说,定义的接口或者属性都必须在继承类中给出相应的实现。

4.由区别3可以得出,如果在抽象类中新增一个方法,继承类可以不需要做改变,但是如果在接口中新增了一个接口方法,必须在子类 中做相应的变化,实现新增的方法。

接下来,简单介绍一下接口相对于抽象类的优劣:

1.接口不光可以作用于引用类型也可以作用于值类型,抽象类只能作用于引用类型 ;

2..NET的类型只能实现单继承,但是接口可以实现多继承;

3.接口类只定义类属性和方法,而与真正的实现类没有太大关系,抽象类与继承类之间的关系就比较紧密了;

4.通过接口可以减少类型暴露的属性和方法,从而便可以保护类型对象,一个实现接口的类型,可能包含其他方法或者属性,但是方法 返回的时候,可以返回接口对象,这样,调用端只能通过接口提供的方法或者属性,访问对象的相关元素,这样可以有效保护对象的其 他元素;

5.减少值类型的拆箱操作。对于Struct定义的值类型数据,每从存放集合当中取出来,都需要进行拆箱操作,这时采用Struct+Interface 结合的方法,从而降低拆箱操作。

其实在继承中,到底使用接口还是抽象类。接口是固定的,约定俗成的,因此在继承类中必须提供接口相应的方法和属性的实现。而对于 抽象类来说,抽象类的定义方法的实现,贯穿整个继承树,因此其中方法的实现或者重写都是不确定的。因此相对而言,抽象类比接口更 灵活一些。

以下通过图表简单总结一下2者之间的差异:

浅谈C#中的接口和抽象类的更多相关文章

  1. 【总结】浅谈JavaScript中的接口

    一.什么是接口 接口是面向对象JavaScript程序员的工具箱中最有用的工具之一.在设计模式中提出的可重用的面向对象设计的原则之一就是“针对接口编程而不是实现编程”,即我们所说的面向接口编程,这个概 ...

  2. 浅谈Java中接口与抽象类的异同

    浅谈Java中接口与抽象类的异同 抽象类和接口这两个概念困扰了我许久,在我看来,接口与抽象类真的十分相似.期间也曾找过许许多多的资料,参考了各路大神的见解,也只能是简简单单地在语法上懂得两者的区别.硬 ...

  3. 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂

    浅谈JS中的!=.== .!==.===的用法和区别   var num = 1;     var str = '1';     var test = 1;     test == num  //tr ...

  4. 浅谈Java中的深拷贝和浅拷贝(转载)

    浅谈Java中的深拷贝和浅拷贝(转载) 原文链接: http://blog.csdn.net/tounaobun/article/details/8491392 假如说你想复制一个简单变量.很简单: ...

  5. 浅谈Java中的深拷贝和浅拷贝

    转载: 浅谈Java中的深拷贝和浅拷贝 假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(bool ...

  6. 浅谈Java中set.map.List的区别

    就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操 ...

  7. Java基础学习总结(29)——浅谈Java中的Set、List、Map的区别

    就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操 ...

  8. 浅谈Java中的equals和==(转)

    浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...

  9. 浅谈Linux中的信号处理机制(二)

    首先谢谢 @小尧弟 这位朋友对我昨天夜里写的一篇<浅谈Linux中的信号处理机制(一)>的指正,之前的题目我用的“浅析”一词,给人一种要剖析内核的感觉.本人自知功力不够,尚且不能对着Lin ...

随机推荐

  1. python2 到 python3 转换工具 2to3

    windows系统下的使用方法: (1)将python安装包下的Tools/Scripts下面的2to3.py拷贝到需要转换文件目录中. (2)dos切换到需要转换的文件目录下,运行命令2to3.py ...

  2. centos 服务开机启动设置

    建立服务文件以nginx 为例 vim /lib/systemd/system/nginx.service 在nginx.service 中插入一下内容 [Unit] Description=ngin ...

  3. 深入浅出设计模式——工厂方法模式(Factory Method)

    介绍在简单工厂模式中,我们提到,工厂方法模式是简单工厂模式的一个延伸,它属于Gof23中设计模式的创建型设计模式.它解决的仍然是软件设计中与创建对象有关的问题.它可以更好的处理客户的需求变化. 引入我 ...

  4. 《BI那点儿事》数据流转换——审核

    审核转换允许对数据流添加审核审核数据,以往使用HIPPA和Sarbanes-Oxley (SOX)时,必须跟踪谁在什么时插入数据,审核转换可以实现这种功能.例如要跟踪那一个task向表里插入数据,可以 ...

  5. 解决float浮动带来的父元素高度没有的问题---清除浮动

    float的特性 : 1:使元素block块级化: 2:破坏性造成的紧密排列特性. 基于以上的特性,使得我们通常把浮动用来布局,带来的问题是,容易出问题,重用性不行,ie6-的版本下很多问题,因为它是 ...

  6. linux 之SCP

    一.从本地到远程复制 1.复制文件 * 命令格式: 1.scp -P remote_port local_file remote_username@remote_ip:remote_folder 或者 ...

  7. centos7 安装mysql5.7.16

    1 下载地址http://dev.mysql.com/downloads/mysql/#downloads 2. 解压 -linux-glibc2.-x86_64.tar.gz 3.移动解压出来的文件 ...

  8. myeclipse/eclipse没有Project Facets的解决方法

    http://www.cnblogs.com/jerome-rong/archive/2012/12/18/2822783.html 经常在eclipse中导入web项目时,出现转不了项目类型的问题, ...

  9. JQuery text()、html() 以及 val()

    获得内容 - text().html() 以及 val() 三个简单实用的用于 DOM 操作的 jQuery 方法: text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元 ...

  10. while 和 for 对比

    for 语句实例 本例中的循环使用 for 循环来显示 cars 数组中的所有值: cars=["BMW","Volvo","Saab",& ...