问题标签 [interface]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3608 浏览

vb.net - 如何在 VB.NET 中使接口属性可选地只读?

这是我之前关于接口的问题的后续。我收到了一个我喜欢的答案,但我不确定如何在 VB.NET 中实现它。

上一个问题:

这个属性应该是我的对象接口的一部分吗?

如何使用 VB.NET 语法实现这一点?据我所知,我唯一的选择是将属性标记为 ReadOnly(我无法实现 setter)或不(我必须实现 setter)。

0 投票
19 回答
31579 浏览

oop - 为什么我要使用接口?

我知道他们强迫您实施方法等,但我不明白您为什么要使用它们。谁能给我一个很好的例子或解释我为什么要实现这个。

0 投票
6 回答
6183 浏览

java - Java中的强制可克隆接口

我在 Java 中遇到了一个小问题。我有一个名为 Modifiable 的接口。实现此接口的对象是可修改的。

我还有一个 ModifyCommand 类(带有命令模式),它接收两个 Modifiable 对象(在列表中进一步交换它们 - 这不是我的问题,我已经设计了那个解决方案)。

ModifyCommand 类首先复制 Modifiable 对象。从逻辑上讲,我让我的 Modifiable 接口扩展了 Cloneable。然后接口定义了一个 clone() 方法,它的实现类必须重新定义。

然后,在 ModifyCommand 中,我可以这样做:firstModifiableObject.clone()。我的逻辑是实现 Modifiable 的类必须重新定义 Object 的 clone 方法,因为它们将是 Cloneable (这就是我想要做的)。

问题是,当我定义类实现 Modifiable 并且我想重写 clone() 时,它不会让我说 Object 类中的 clone() 方法隐藏了 Modifiable 中的方法。

我该怎么办?我的印象是“我做错了”......

谢谢,

纪尧姆。

编辑:它认为我会忘记 clone() 的事情。我将a)假设传递给Modifiable对象(实现接口)的对象已经被克隆或b)创建另一个称为copy()的方法,该方法基本上会对Modifiable对象进行深层复制(或者通用解决方案可能会起作用......)。

0 投票
3 回答
314 浏览

c# - 你如何平衡框架/API 设计和 TDD

我们正在构建一个可供其他开发人员使用的框架,目前我们一直在使用大量的 TDD 实践。我们到处都有接口,并且有编写良好的模拟接口的单元测试。

然而,我们现在已经达到了输入类的一些属性/方法需要是内部的,并且对我们的框架用户不可见的地步(例如对象 ID)。那么问题是我们不能将这些字段/方法放在界面上,因为界面没有描述可访问性。

我们可以:

  1. 在方法的第一行仍然使用接口和向上转换,但这似乎违背了接口的目的。
  2. 使用类作为输入参数——打破一切都应该是接口的 TDD 规则
  3. 提供另一层,在公共接口和内部接口之间进行一些转换

是否有现有的模式/方法来处理这个问题?TDD 人们说应该做什么?

0 投票
3 回答
13476 浏览

c# - 接口的属性

我有一个接口,它定义了一些带有属性的方法。这些属性需要从调用方法中访问,但是我有的方法并没有从接口中拉取属性。我错过了什么?

0 投票
5 回答
8307 浏览

c# - C#接口实现关系只是“Can-Do”关系?

今天有人告诉我,C#中的接口实现只是“Can-Do”关系,而不是“Is-A”关系。这与我长期以来对 LSP(Liskov Substitution Principle)的信念相冲突。我一直认为所有继承都应该意味着“Is-A”关系。

所以,如果接口实现只是一个“可以做”的关系。如果有一个接口“IHuman”和“IEngineer”,一个类“Programmer”继承自“IHuman”和“IEngineer”怎么办?当然,“程序员”是“IHuman”和“IEngineer”。

如果只是“Can-Do”关系,是否意味着我们不能期望“Programmer”实例的行为在被视为 IHuman 和被视为 IEngineer 时可能会有所不同?

0 投票
1 回答
3074 浏览

c# - 重新实现另一个接口已经继承的接口

我经常看到这样的东西:

当 B 已经继承 A 时,为什么要指定 C 实现接口 A?它会产生任何语义差异还是只是风格问题?

(许多示例之一是List<T>实现IList<T>and ICollection<T>,同时IList<T>也派生自ICollection<T>)。


更新:感谢您确认我的猜测,它不会产生任何语义差异。

我想出了一个相关的情况,显式命名已经在继承树中的接口确实会有所不同:

如果B是一个类,则C只会(重新)实现接口成员,A如果它A在“”之后显式命名:

[编辑] 我更改了问题的措辞以避免与显式实现的接口成员混淆,这将成员的使用限制在对象被转换为接口的情况下。

0 投票
8 回答
3193 浏览

java - Java接口是抽象类吗?

我正在做一些家庭作业,以前试卷上的一个问题要求命名给定 UML 图中的所有抽象类。相当简单,我想。有一个抽象类和三个接口。一般来说,这些接口是否有资格作为抽象类?

0 投票
3 回答
2640 浏览

wpf - WPF HiercharchicalDataTemplate.DataType:如何对接口做出反应?

问题

我有一个IThings 的集合,我想HierarchicalDataTemplate为 a 创建一个TreeView。直截了当DataType={x:Type local:IThing}当然行不通,可能是因为 WPF 创建者不想处理可能的歧义。

由于这应该同时处理IThing来自不同来源的 s,所以引用实现类是没有问题的。

当前解决方案

现在我正在使用通过具体实现代理 IThing 的 ViewModel:

问题

有没有更好的(即没有代理)方式?

0 投票
1 回答
432 浏览

delphi - 这是 Delphi 2009 中的错误吗?

它确实看起来像一个错误,但我只有试用版,所以它可能已经修复。

以上内容将无法编译。但以下是!

编辑:我刚刚发现如果您尝试实例化 TTest,它将失败。所以有点不一致,但没那么糟糕!