接口用于实现多个继承,但在MY代码中没有多重继承

时间:2012-04-15 08:07:29

标签: c# mvvm-light

没有多重遗传。但我的项目合作伙伴使用接口来实现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;
}

请说明界面的需要。

1 个答案:

答案 0 :(得分:0)

接口可用于多种用途。多重继承或解决circular reference很少。

但在大多数情况下,接口用于在使用者(需要某些功能的类)和实现(实现此功能的类)之间签订合同。这意味着,他们都同意这个功能是什么,但不是如何实现这个功能。然后消费者不需要关心实现(消费者只是使用安排的接口),实现者可以肯定,当他正确实现所有接口方法时,该接口的任何消费者都会接受这种实现。如果消费者和实现类是由不同的人编写的,这是特别有用的,但即使不需要强调事实,消费者也不依赖于特定的实现,这是非常有用的,这是面向对象的非常好的实践节目。可以有许多不同的接口消费者,可以有许多不同的接口实现,但是他们不需要彼此了解任何事情,因为它们只能通过接口进行通信。

为了给你一些例子,假设你正在处理具有从整数列表中返回5个最大整数的方法的类。最简单的方法是按降序对整个列表进行排序,然后返回前5个数字。但是你不想在你的类中实现排序算法,因为它是单独的功能,应该在其他类中实现(或者可能已经有类这样做了)。因此,您使用一个方法 Sort 定义接口,该方法接受整数数组并返回已排序的数组。您不关心如何实现此排序功能,您只需使用此界面的排序方法即使您不了解排序算法也可以完成您的课程。然后你的同事(或你)将创建另一个实现此接口的类。他不需要了解你的课程,他可以使用他想要的任何排序算法,他可以在将来的任何时候改变算法,它仍然可以一起工作。

接口必要性的好例子是插件。主应用程序的作者创建了公共可用的接口,其功能是他的应用程序将使用的。然后,通过实现此接口编写类的人可以将其用作插件。