关于c#:interface vs abstract class

interface vs abstract class

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Interface or abstract class?

我有一组类定义如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
namespace VGADevices.UsingAbstractClass
{
    public abstract class VGA
    {
        public abstract int HorizontalResolution { get; set; }
        public abstract int VerticalResolution { get; set; }
    }
    public class LCDScreen : VGA
    {
        public override int HorizontalResolution { get; set; }
        public override int VerticalResolution { get; set; }
    }
}  // namespace VGADevices.UsingAbstractClass

namespace VGADevices.UsingInterfaces
{
    public interface IVGA
    {
        int HorizontalResolution { get; set; }
        int VerticalResolution { get; set; }
    }
    public class LCDScreen : IVGA
    {
        public virtual int HorizontalResolution { get; set; }
        public virtual int VerticalResolution { get; set; }
    }
}  // namespace VGADevices.UsingInterfaces

客户代码,我可以选择:

1
2
3
4
class Computer
{
        public VGA VGAOutput { get; set; }
}

1
2
3
4
class Computer
{
        public IVGA VGAOutput { get; set; }
}

我在某个地方读到使用接口更好,但为什么呢?使用抽象类,我可以定义一个接口,还可以添加数据成员,那么为什么接口是首选方法呢?二进制替换在这里也起作用吗?

谢谢您

克里斯


您可以继承(即实现)多个接口。不能从多个抽象类继承


查看此日志:

http://www.codeproject.com/kb/cs/abstractsvsinterfaces.aspx

我看到的最重要的功能:多继承(接口可以实现多个接口,抽象只能从一个继承)同质性(我有两个具有相同接口的对象,但它们实际上不是同一个对象,不应该共享任何代码)