【问题标题】:interface vs abstract class [duplicate]接口与抽象类[重复]
【发布时间】:2011-06-22 21:20:09
【问题描述】:

可能重复:
Interface or abstract class?

我有一组定义如下的类:

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

客户端代码,我可以选择:

class Computer
{
        public VGA VGAOutput { get; set; }
}

class Computer
{
        public IVGA VGAOutput { get; set; }
}

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

谢谢

克里斯

【问题讨论】:

  • 克里斯,您应该在 SO 上搜索此问题的现有完全重复项,然后删除此问题。

标签: c# interface abstract


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    看看这篇文章:

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

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

    【讨论】:

    • 你不继承接口,你实现它们。在这方面将它们与抽象类进行比较是没有意义的;它们是根本不同的东西。
    • 呃,这更不太清楚了。
    猜你喜欢
    • 2017-11-13
    • 2012-06-01
    • 2012-10-03
    • 2011-07-12
    • 2018-04-05
    • 2013-11-25
    • 2017-02-19
    • 2016-03-24
    • 2010-12-01
    相关资源
    最近更新 更多