Interface的主要功能是什么。我们知道我们可以使用接口实现动态行为,但我想它不仅仅是实用程序。所以我想知道什么时候我们必须编写接口,什么时候需要去抽象类。
在现实生活场景中向我展示界面的5或10个最重要的用途。
我想到的另一个主要用途是项目经理或团队负责人将通过界面和其他开发人员实现基本骨架。
所以请大家给我看一下示例代码,我们可以用抽象类或具体类来做几个最重要的接口用法。
接口是类或结构之间定义的契约,只要满足相同的合同即消费者可以通过不同的合同交换实现,方法名称和签名构成类和结构可以反对而不是工作的规范反对具体实施。
关于接口的重要部分是知道何时使用它们,事实上它很简单,当你希望两个或多个不相关的对象具有相同的通用功能但不一定是你想要使用的相同实现时接口;否则,当您拥有具有共享功能和实现的相关对象时,您可以考虑使用抽象类而不是接口。
当您希望两个或多个不相关的对象具有相同的通用功能但不一定是相同的实现时,您将需要使用接口;否则,当您拥有具有共享功能和实现的相关对象时,您可以考虑使用抽象类而不是接口。
如果有人用示例代码解释何时去接口&当抽象类。 向我展示几个最重要的区域,它始终处理带有示例代码的接口或最佳接口用于示例代码。谢谢
答案 0 :(得分:1)
我不会回答你所有的问题。我只是想给你一些提示。
接口和抽象类之间的主要区别在于,即使c#类声明了相同的成员,它也可以实现多个接口。它甚至可以通过显式实现接口来以不同方式实现那些同名的成员。
如果从派生类派生,则还“继承”其依赖项。例如,如果抽象类中的方法使用来自不同程序集的另一个类,则必须引用该程序集。 - >编译顺序 - >没有并行构建
使用具有基本功能的抽象类时,模拟单元测试会比较麻烦
答案 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
的一些微软建议