c# - 如何在新实现的接口(interface)或基类之间做出决定?

标签 c# asp.net interface base

当谈到实现时,我应该如何决定使用基类型还是接口(interface)?我试图解决几个例子,但我没有得到完整的想法:(

关于如何以及为什么的例子将不胜感激..

最佳答案

基类,无论是否抽象,都可以包含已实现的成员。接口(interface)不能。如果您的所有实现都将以相似的方式执行,那么基类可能是可行的方法,因为您的所有子类都可以共享基类成员的相同实现。如果他们不打算共享实现,那么接口(interface)可能是可行的方法。

例子:

class Person
{
    string Name { get; set; }
}

class Employee : Person
{
    string Company { get; set; }
}

Employee 继承自 Person 是有意义的,因为 Employee 类不必定义 Name 属性,因为它共享实现。

interface IPolygon
{
    double CalculateArea();
}

class Rectangle : IPolygon
{
    double Width { get; set; }
    double Height { get; set; }

    double CalculateArea()
    {
        return this.Width * this.Height;
    }
}

class Triangle : IPolygon
{
    double Base { get; set; }
    double Height { get; set; }

    double CalculateArea()
    {
        return 0.5 * this.Base * this.Height;
    }
}

因为 RectangleTriangle 具有如此不同的 CalculateArea 实现,所以它们从基类继承是没有意义的。

如果你创建了一个基类,并且发现只有包含抽象成员,你还不如使用一个接口(interface)。

而且,正如 j__m 所述,您不能从多个基类继承,但可以实现多个接口(interface)。

我通常先定义接口(interface),如果我发现自己在实现中重复代码,我会创建一个实现该接口(interface)的基类,并使我的实现继承自它。

关于c# - 如何在新实现的接口(interface)或基类之间做出决定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15583896/

相关文章:

asp.net - Membership.GetAllUsers() 无法连接到数据库 ASP.Net Identity MVC 5

c# - 如何使用mvvm剑道网格发布数据并发布API Controller 不调用?

java - 接口(interface)声明的访问说明符

c# - 如果中间有 linq 方法,rx 处理异常订阅

c# - 用户偏好匹配推荐系统( PIL 逊相关)

c# - 上传的文件未保存到文件系统

ASP.Net 2.0 VB 网站项目 "Type ' 异常'未定义”

delphi - 为什么不调用抽象基类方法的后代版本?

java - 扩展多个类的解决方案

c# - CollectionViewSource 违反 MVVM