接口和抽象类里面都有公共的方法和属性
不过接口中的方法和属性都必须实现.
抽象类中的方法和属性不须全都实现.
不过就因为这点小差别就让C#中多个接口?说不过去吧.
所以他们在使用上还应该有别的区别吧?
想请教各位大大.他们在使用中到底有些什么样的区别啊?
到底在什么样的情况下用接口什么样的情况下用抽象类?
说真的以前都不怎么关心接口的.不过最近看的一个程序中满篇用的都是接口.而这程序又必须得看.所以想在这里请教一下,希望大家不吝指教.谢谢!

解决方案 »

  1.   

    你可以看一下 Effective C#: 50 Specific Ways to Improve Your C# chapter3的两篇
    Item 19: Prefer Defining and Implementing Interfaces to Inheritance
    Item 20: Distinguish Between Implementing Interfaces and Overriding Virtual Functionshttp://search.safaribooksonline.com/?x=1&mode=toc&sortKey=title&sortOrder=asc&view=&xmlid=0321245660&k=10&g=&catid=itbooks.prog.csharp&s=1&b=1&f=1&t=1&c=1&u=0&r=&o=1&n=1&d=1&p=1&a=0
      

  2.   

    为什么要有接口呢?主要原因是它们是一种有效的契约。类有一些成员,不必考虑把成员组合在一起的问题,类只包含一个拥有各种方法、字段和属性等的列表,但为了能以某种方式使用类,必须知道类能执行哪些功能。具体操作是声明执行一个或多哥接口的类,类执行接口的方式是从这个接口派生,再提供在这个接口中定义的所有成员的执行方式。一个类可以继承自多个接口:
    using System.Collections;
    public struct OperatorOverride:IEnumerable,IFormattable
    实现多个接口里的内容
      

  3.   

    类可能只是从一个基类继承,所以如果要使用抽象类为一组类提供多态性,这些类必须都是从那个类继承的。 
    抽象类还可能提供已实现的成员。因此,可以用抽象类确保特定数量的相同功能,但不能用接口这样做。 
    这里是一些建议,帮助您决定使用接口还是抽象类为组件提供多态性。 如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单易行的方法来控制组件版本。通过更新基类,所有继承类都随更改自动更新。另一方面,接口一旦创建就不能更改。如果需要接口的新版本,必须创建一个全新的接口。 
    如果创建的功能将在大范围的全异对象间使用,则使用接口。抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。 
    如果要设计小而简练的功能块,则使用接口。如果要设计大的功能单元,则使用抽象类。 
    如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。抽象类允许部分实现类,而接口不包含任何成员的实现。在abstract class的定义中,我们可以赋予方法的默认行为。但是在interface的定义中,方法却不能拥有默认行为,为了绕过这个限制,必须使用委托,但是这会 增加一些复杂性,有时会造成很大的麻烦。 
    在抽象类中不能定义默认行为还存在另一个比较严重的问题,那就是可能会造成维护上的麻烦。因为如果后来想修改类的界面(一般通过abstract class或者interface来表示)以适应新的情况(比如,添加新的方法或者给已用的方法中添加新的参数)时,就会非常的麻烦,可能要花费很多的时间(对于派生类很多的情况,尤为如此)。但是如果界面是通过abstract class来实现的,那么可能就只需要修改定义在abstract class中的默认行为就可以了。 
      

  4.   

    http://www.54bk.com/more.asp?name=hewei&id=9209&commentid=20527