【问题标题】:Interface uses for implementing multiple inheritances, but in MY code there is no multiple inheritances接口用于实现多重继承,但在我的代码中没有多重继承
【发布时间】:2012-04-26 23:26:35
【问题描述】:

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

请解释一下接口的需求。

【问题讨论】:

  • “多级继承”是什么意思?
  • 我不明白你的问题。一个接口代表一个契约,在这里它很可能用于将契约与其实现分离。甚至可能在此接口的使用者未引用的程序集中实现。
  • 据我所知,我只在多级继承的情况下使用接口。但是,在这里我没有看到任何多级继承的情况。所以,我无法理解接口的作用。
  • @user1334247:您还没有解释“多级继承”是什么意思。
  • @user1334247:好的 - 您应该知道“多级继承”不是实现多个接口的标准术语。并且大多数时候使用接口没有多个接口由同一类型实现。

标签: c# mvvm-light


【解决方案1】:

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

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

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

接口必要性的好例子是插件。主应用程序的作者创建了具有功能的公开可用接口,他的应用程序将使用这些功能。然后,任何人编写具有此接口实现的类都可以将其用作插件。

【讨论】:

    猜你喜欢
    • 2013-10-22
    • 1970-01-01
    • 2011-11-21
    • 2011-10-07
    • 2012-06-02
    • 2017-03-24
    • 2019-03-06
    相关资源
    最近更新 更多