1 c# oop abstract-class interface
我已经开始担任支持开发人员的职业,但我梦想着为S / W开发人员找到一份工作。我正在用C#学习OOPS。通常让我烦恼的一件事是接口和抽象类的用法。何时使用接口以及何时使用抽象类。我在这个主题上搜索了google,但是无论浏览什么答案,我都看到所有人都在尝试解释什么是抽象和接口,但是我不是按照他们的定义,而是希望看到它们在实际程序中的实际用法。在这里,我想强调一个使用接口的代码,但我认为全部内容也可以使用抽象类进行设计。
如果我将存储库公开为接口,请参见下面的存储库设计模式代码,其中已使用接口
public interface IEmployeeRepository
{
Employee[] GetAll();
}
Run Code Online (Sandbox Code Playgroud)
那么优势将是我可以有如下所示的多种实现
public class EmployeeRepositoryEF: IEmployeeRepository
{
public Employee[] GetAll()
{
//here you will return employees after querying your EF DbContext
}
}
public class EmployeeRepositoryXML: IEmployeeRepository
{
public Employee[] GetAll()
{
//here you will return employees after querying an XML file
}
}
public class EmployeeRepositoryWCF: IEmployeeRepository
{
public Employee[] GetAll()
{
//here you will return employees after querying some remote WCF service
}
}
Run Code Online (Sandbox Code Playgroud)
请参见上面的代码,该代码具有一个协定方法,GetAll()
并且谁将扩展接口,然后他们可以提供自己的实现。那是优点,但是我的问题是我可以在这里写抽象类而不是接口吗?
假设我有一个抽象类
abstract class AbsEmployeeRepository
{
abstract public Employee[] GetAll();
}
Run Code Online (Sandbox Code Playgroud)
现在我所有其他的存储库将扩展抽象类 AbsEmployeeRepository
并覆盖该函数GetAll()以提供自己的实现。
现在的问题是抽象类是否可以解决我的目的,那么为什么在这种情况下我们需要接口。在考虑多重继承的情况下,接口将是首选,否则我们可以使用抽象类完成工作。
寻找有价值的意见和建议。谢谢
小智 5
你可以使用一个抽象类,当你有
你可以使用一个接口时
通常,您将抽象类(用于共享代码)和接口(用于文档)一起使用。