【问题标题】:Is this understanding on INTERFACES correct? [duplicate]这种对 INTERFACES 的理解正确吗? [复制]
【发布时间】:2012-04-06 21:23:02
【问题描述】:

可能重复:
Interfaces: Why can't I seem to grasp them?

关于什么是界面(技术,c#)以及为什么会出现等等,我已经看到了许多不同类型的答案。

今天我想请教各位,我的理解是否正确?

当您希望您的消费者类(例如 B、C、D、E 类)出于某种原因(而该原因是接口名称)使用 A 类时,您将在 A 类上实现一个接口。

假设 A 类具有删除员工工作历史数据和删除员工技能数据的功能。此类 A 具有名为 Employee_Id 的非 null 属性

现在您将实现 2 个接口 IDeleteWorkHistroy 和 IDeleteSkillSet 并在 A 类中实现它们

所有消费者类 B、C、D... 将仅通过这两个接口与您的类对话,它们不会在应用程序的任何地方直接使用类 A 的实例

例如 在 B 类中只想删除员工的工作历史: IDeleteWorkhistory EmpWH = 新类 A(emp_id); 在 B 类的其他任何地方,您都将使用 EmpWH,而不是 A 类的其他任何东西。

基本上,你的类的消费者只会使用他需要的东西,或者消费者会以其他方式与他需要的接口对话。

换句话说(键盘是您计算机的接口)如果您想与您的计算机对话,您将不需要位定序器,您可以使用中断将信息逐位传递给 CPU..(不过,理想情况下,您可以这样做它)。 您将仅使用正确的界面与您的机器对话。

因此,您正在编写的任何类,都要编写适当的接口,以便消费者以标准方式与您的类交谈。

如果我的理解正确或需要修改,请告诉我?

【问题讨论】:

  • 您似乎将 UI(用户界面)与技术 C# interface 混淆了。
  • 您可能想在programmers.stackexchange.com 上提问。
  • @Oded ,不,我不是。我修改了问题的第一行。谢谢。
  • @Andras Zoltan,这不是重复的,我关心的是我是否正确?

标签: c# oop interface polymorphism


【解决方案1】:

实际上,我看到的界面更像是“模板”。例如:您想确保某个类提供某些功能。接口允许使用类的人专注于功能,而不是如何实现。

示例:列表
列表需要添加、搜索和删除项目以及在特定位置获取项目的方法。这可以变成一个界面。

现在可能有多个内部工作方式不同的接口实现。例如,ArrayList 可以将列表作为数组进行管理,SingleLinkedList 可以实现链表或DoubleLinkedList。所有这些实现都是不同的,例如也具有不同的性能。

如果您要编写一个对列表进行排序的方法,您不必关心给出的是哪种类型的列表 - 您需要知道的只是实现实现了接口中声明的方法。

但是:为你编写的每个类都创建一个接口是没有意义的!有时,适当的类层次结构或抽象基类就足够了。

编辑
我不认为你的理解是完全正确的。您是说目标应该是尽可能少地使用类的功能。虽然接口可以用于实现您所描述的内容是正确的,但给定的场景不是在大多数情况下是所需的,它是不是 接口的主要目标。

【讨论】:

  • 我的问题是我的理解是否正确?
  • 我的回答是:不,不完全。查看我的编辑。
  • “为你编写的每个类创建一个接口” - 如果你的所有类都足够通用,可以被许多组使用,那么“是”。查看 Microsoft System.dll,您会发现几乎每个类都有一些接口?
  • @dnkulkarni:不,这不是真的。虽然有些课程显然可以,但大多数都没有。请告诉我你是怎么发现的。
  • 几乎所有列表类型都是 Ienumerable,所有基本数据类型(字符串、int 等)都具有 icomparable 等,
【解决方案2】:

接口基本上是一个契约。通过在类中实现接口,您是说该类将提供某些方法。

例如,如果您创建一个类并使用 IDisposable 接口,那么您就是说您的类将提供 IDisposable 指定的方法,例如 Dispose()。

尝试阅读此http://www.4guysfromrolla.com/articles/110304-1.aspx

【讨论】:

  • 我认为您的理解基本正确,尽管我认为您对术语的使用有点偏离。例如,您说“所有消费者类 B、C、D ... 将仅通过这两个接口与您的类对话,并且它们不会直接在应用程序的任何地方使用类 A 的实例”类 A 将需要作为实例,该实例将仅包含接口,并且它们将仅使用这些方法。除非您使用静态方法并且可以直接从类中调用它们。
  • 这就是为什么我说“他们不会[直接]使用”。他们正在间接使用,而且必须这样做。
【解决方案3】:

我觉得你的理解是对的。我通常将接口视为功能的标记。一个类可能有不止一个功能,当你继承接口时,就好像说我能做到。一些消费者可能不需要所有功能,或者可能不需要与另一个消费者相同的功能。

另一方面,这并不是接口的唯一用途。有时您使用它们以某种方式实现多重继承,有时用于 IOC 目的。但在你的上下文中,我认为你是对的。

【讨论】:

    猜你喜欢
    • 2016-01-09
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多