Interface在现实世界编程中的主要用途是什么

时间:2014-02-20 10:17:50

标签: c# oop interface

Interface的主要功能是什么。我们知道我们可以使用接口实现动态行为,但我想它不仅仅是实用程序。所以我想知道什么时候我们必须编写接口,什么时候需要去抽象类。

在现实生活场景中向我展示界面的5或10个最重要的用途。

我想到的另一个主要用途是项目经理或团队负责人将通过界面和其他开发人员实现基本骨架。

所以请大家给我看一下示例代码,我们可以用抽象类或具体类来做几个最重要的接口用法。

一个人告诉我这种方式对我来说不太清楚

接口是类或结构之间定义的契约,只要满足相同的合同即消费者可以通过不同的合同交换实现,方法名称和签名构成类和结构可以反对而不是工作的规范反对具体实施。

关于接口的重要部分是知道何时使用它们,事实上它很简单,当你希望两个或多个不相关的对象具有相同的通用功能但不一定是你想要使用的相同实现时接口;否则,当您拥有具有共享功能和实现的相关对象时,您可以考虑使用抽象类而不是接口。

这件事特别不清楚

当您希望两个或多个不相关的对象具有相同的通用功能但不一定是相同的实现时,您将需要使用接口;否则,当您拥有具有共享功能和实现的相关对象时,您可以考虑使用抽象类而不是接口。

如果有人用示例代码解释何时去接口&当抽象类。 向我展示几个最重要的区域,它始终处理带有示例代码的接口或最佳接口用于示例代码。谢谢

3 个答案:

答案 0 :(得分:1)

我不会回答你所有的问题。我只是想给你一些提示。

  1. 接口和抽象类之间的主要区别在于,即使c#类声明了相同的成员,它也可以实现多个接口。它甚至可以通过显式实现接口来以不同方式实现那些同名的成员。

  2. 如果从派生类派生,则还“继承”其依赖项。例如,如果抽象类中的方法使用来自不同程序集的另一个类,则必须引用该程序集。 - >编译顺序 - >没有并行构建

  3. 使用具有基本功能的抽象类时,模拟单元测试会比较麻烦

答案 1 :(得分:1)

让我们假设一些数据访问对象可以从数据库,SAOP服务,REST服务甚至XML文件中检索数据。

您可以使用Interfaces来确保它们为应用程序的其余部分提供哪种操作。您还可以说这些接口描述了域以及它们如何与域进行交互。

public interface IUserDao
{
    User GetUserById(int id);
    void AddUser(User u);
    ....
}

这个IUserDao可以通过使用WCF,实体框架,XmlDocuments和许多其他技术来实现,控制器或应用程序的其他部分不关心细节,只要它们具有那些抽象方法即可检索并添加用户。

另一方面,相同的数据访问对象可以有一个基类,例如可以初始化某些连接或打开XmlDocument,...

public abstract BaseDao
{
    public Connection GetNewConnection()
    {
        ....
    }

    // or similar functions which are used by DAOs accessing the same data source (DB, XML, ...)
}

正如所描述的那样,您可以使用接口来隐藏实现细节并将实现带到更加宽松的水平,这样,技能较低的开发人员或开发人员对域特定方面更感兴趣(某些特定的计算,... )无需了解他们需要从数据库检索数据到数据库的确切方式,他们可以做出贡献。

此外,交换功能也更容易,例如,您可以从简单的xml文件开始,但很快您就会意识到您需要一个完整的数据库 - 您可以保留接口并使用数据库访问来实现类。 / p>

另一方面,抽象类共享基本功能(技术功能),这是基本功能,它被许多类使用,但不应单独实例化。您可以使用静态方法为某些实用程序类交换抽象类,但是您可能会失去OOP的优点。

答案 2 :(得分:0)

来自此link

的一些微软建议
  1. 如果您预计会创建多个版本的组件, 创建一个抽象类。抽象类提供简单易用 对组件进行版本化的方法。通过更新基类,全部 继承类会随着更改自动更新。 另一方面,接口一旦创建就无法更改。如果一个 需要新版本的界面,您必须创建一个全新的界面 接口
  2. 如果您正在创建的功能在整个范围内有用 不同对象的范围,使用接口。抽象类 应该主要用于密切相关的对象, 而接口最适合提供通用 不相关类的功能。
  3. 如果您正在设计小巧,简洁的功能,请使用 接口。如果您正在设计大型功能单元,请使用 抽象类。
  4. 如果您想在所有人中提供通用的,已实现的功能 组件的实现,使用抽象类。抽象 类允许您部分实现您的类,而 接口不包含任何成员的实现。