代码之家  ›  专栏  ›  技术社区  ›  Thomas

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

  •  -1
  • Thomas  · 技术社区  · 12 年前

    接口的主要用途是什么。我们知道我们可以使用接口实现动态行为,但我想这不仅仅是实用性。所以我想知道我们什么时候需要编写接口,什么时候需要抽象类。

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

    我想到的另一个主要用途是,项目经理或团队负责人将通过接口实现基本框架,其他开发人员将遵循该框架。

    所以请大家用示例代码向我展示我们可以用抽象类或具体类实现的接口的几个最重要的用法。

    一个人这样告诉我,我不太清楚

    接口是类或结构之间定义的契约,只要满足相同的契约,即构成类和结构可以针对的规范的方法名和签名,而不是针对具体的实现,用户就可以用不同的契约交换实现。

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

    这件事不是特别清楚

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

    如果有人用示例代码解释何时使用接口&当抽象类时。 给我展示几个最重要的领域,这些领域总是用带有示例代码的接口来处理,或者最好的接口使用带有示例代码。谢谢

    3 回复  |  直到 12 年前
        1
  •  1
  •   Milan Raval    12 年前

    微软对此的一些建议 link

    1. 如果您希望创建组件的多个版本, 创建一个抽象类。抽象类提供了一个简单易用的 版本化组件的方法。通过更新基类,所有 继承类会随着更改自动更新。 另一方面,接口一旦创建就不能更改。如果 需要新版本的接口,您必须创建一个全新的 界面
    2. 如果您正在创建的功能在 一系列不同的对象,使用一个接口。抽象类 应主要用于密切相关的对象, 而接口最适合提供公共 不相关类的功能。
    3. 如果您正在设计小而简洁的功能,请使用 接口。如果要设计大型功能单元,请使用 抽象类。
    4. 如果您希望在所有应用程序中提供通用的、已实现的功能 组件的实现,使用抽象类。摘要 类允许您部分实现类,而 接口不包含任何成员的实现。
        2
  •  1
  •   Scordo    12 年前

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

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

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

    3. 当使用具有基本功能的抽象类时,在unittest中进行模拟可能会更加困难

        3
  •  1
  •   peter    12 年前

    让我们以一些数据访问对象为例,这些对象可以从DB、SAOP服务、REST服务甚至XML文件中检索数据。

    您可以使用接口来确保它们为应用程序的其余部分提供什么样的操作。您还可以说,这些接口描述了域及其交互方式。

    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文件开始,但很快你就会意识到你需要一个完整的DB——你可以保留接口,并通过DB访问实现类。

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