说到实现,我应该如何决定 Select 基类型还是接口?我try 了几个例子,但我不完全明白:(

请举例说明如何以及为什么..

推荐答案

基类(抽象或非抽象)可以包含实现的成员.接口不能.如果您的所有实现都将以类似的方式执行,那么基类可能是最佳 Select ,因为您的所有子类都可以共享基类上成员的相同实现.如果他们不打算共享实现,那么一个接口可能是最好的 Select .

例子:

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;
    }
}

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

如果您创建了一个基类,并且发现only中包含抽象成员,那么您也可以只使用一个接口.

而且,正如j_m所说,您不能从多个基类继承,但可以实现多个接口.

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

Asp.net相关问答推荐

设置主键时KeyAttribute属性不起作用

如何获取已构建、编码的 ViewState 的值?

带有 Web 套接字的 SignalR

如何以编程方式获取会话 cookie 名称?

在asp.net mvc c#中使用cookie

HttpWebRequest 未通过凭据

使用 ASP.NET WebForms 的 jQuery DataTables 服务器端处理

我可以创建 .config 文件并将其包含到 web.config 中吗?

如何从 JS 访问 ViewBag

如何使用 app_GlobalResource 或 app_LocalResource?

IIS 中的 existingResponse="PassThrough" 是什么意思?

如何将图像 url 转换为 system.drawing.image

什么是实体框架中的复杂类型以及何时使用它?

如何从 Web API 应用程序返回 PDF

如何避免 ASP.NET MVC 中的 HttpRequestValidationException 呈现导致异常的相同视图

盒式磁带包与 MVC4 包

好的 ASP.NET 类似 excel 的网格控件?

ASP.NET - 从静态方法/静态类访问会话?

ASP.NET MVC3 局部视图命名约定

如何创建代表 colored颜色 的随机十六进制字符串?