接口用于实现多个继承,但在 MY 代码中没有多个继承
本文关键字:继承 代码 MY 用于 实现 接口 但在 | 更新日期: 2023-09-27 18:31:13
没有多重继承。但是我的项目合作伙伴使用接口来实现add, remove
等方法。
这是代码:
public interface IAccountCategoryDataSource
{
bool Add(AccountCategory accountCategory);
bool Update(AccountCategory accountCategory);
bool Remove(AccountCategory accountCategory);
AccountCategory GetById(int id);
AccountCategory GetByName(string name);
IEnumerable<AccountCategory> GetByParentCategory(AccountCategory category);
IEnumerable<AccountCategory> GetTopLevelCategories();
IEnumerable<AccountCategory> GetBySearchTerm(string searchTerm);
IEnumerable<AccountCategory> GetAll();
event EventHandler<ObjectAddedEventArgs> AccountCategoryAdded;
event EventHandler<ObjectUpdatedEventArgs> AccountCategoryUpdated;
event EventHandler<ObjectRemovedEventArgs> AccountCategoryRemoved;
}
请解释接口的需求是什么。
接口可用于多种用途。多重继承或求解循环引用是其中的少数。
但在大多数情况下,接口用于在使用者(需要某些功能的类)和实现(实现此功能的类)之间建立契约。这意味着,他们都同意此功能是什么,但不同意此功能将如何实现。然后消费者不需要关心实现(消费者只是使用安排的接口),实现者可以确定,当他正确实现接口的所有方法时,这个接口的任何消费者都会接受这个实现。如果消费者和实现类是由不同的人编写的,这尤其有用,但即使不需要它只是为了强调这样一个事实,即消费者不依赖于特定的实现,这在面向对象编程中是非常好的实践。接口可以有许多不同的使用者,接口可以有许多不同的实现,但它们不需要知道彼此的任何信息,因为它们只能通过接口进行通信。
举个例子,假设你正在处理具有从整数列表中返回 5 个最大整数的方法的类。最简单的方法是按降序对整个列表进行排序,然后返回前 5 个数字。但是你不想在你的类中实现排序算法,因为它是独立的功能,应该在其他类中实现(或者可能已经有类这样做)。因此,您可以使用一种方法 Sort 定义接口,该方法采用整数数组并返回排序数组。你不在乎这个排序函数将如何实现,你只需使用这个接口的 Sort 方法,即使对排序算法一无所知,你也可以完成你的类。然后,您的同事(或您)将创建另一个实现此接口的类。他不需要了解你的类,他可以使用任何他想要的排序算法,他可以在将来随时更改算法,并且它仍然可以一起工作。
接口必要性的好例子是插件。主应用程序的作者创建具有函数的公开可用的接口,他的应用程序将使用。然后,任何使用此接口的实现编写类的人都可以将其用作插件。