问题标签 [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 投票
14 回答
439142 浏览

c# - C#中的多重继承

由于多重继承不好(它使源代码更复杂)C# 没有直接提供这样的模式。但有时拥有这种能力会有所帮助。

例如,我可以使用接口和三个类似的类来实现缺少的多重继承模式:

每次我向其中一个接口添加方法时,我也需要更改FirstAndSecond类。

有没有办法像在 C++ 中那样将多个现有类注入一个新类?

也许有使用某种代码生成的解决方案?

或者它可能看起来像这样(虚构的 c# 语法):

这样当我修改其中一个接口时就不需要更新类 FirstAndSecond 了。


编辑

也许考虑一个实际的例子会更好:

您已经在项目内的不同位置使用了一个现有的类(例如,基于 ITextTcpClient 的基于文本的 TCP 客户端)。现在您觉得有必要为您的类创建一个组件,以便 Windows 窗体开发人员可以轻松访问。

据我所知,您目前有两种方法可以做到这一点:

  1. 编写一个从组件继承的新类,并使用类本身的实例实现 TextTcpClient 类的接口,如 FirstAndSecond 所示。

  2. 编写一个继承自 TextTcpClient 并以某种方式实现 IComponent 的新类(实际上还没有尝试过)。

在这两种情况下,您都需要按方法而不是按类工作。既然您知道我们将需要 TextTcpClient 和 Component 的所有方法,那么将这两者组合到一个类中将是最简单的解决方案。

为避免冲突,这可以通过代码生成来完成,其中结果可以在之后更改,但是手动输入是纯粹的痛苦。

0 投票
2 回答
4134 浏览

c# - 如何将带有枚举的 VB.net 接口转换为 C#

我有以下需要移植到 C# 的 VB.net 接口。C# 不允许在接口中进行枚举。如何在不更改使用此接口的代码的情况下移植它?

0 投票
11 回答
1572 浏览

c# - 使用显式接口来确保针对接口进行编程

我已经看到了使用显式接口作为将类使用锁定到该接口的方法的论点。争论似乎是,通过强制其他人对接口进行编程,您可以确保更好地解耦类并允许更轻松的测试。

例子:

并使用 Knife 对象:

你会推荐这种接口实现方法吗?为什么或者为什么不?

编辑:另外,鉴于我使用的是显式接口,以下内容将不起作用。

0 投票
4 回答
4121 浏览

java - Validate 接口的继承设计

我从来没有这么擅长设计,因为有很多不同的可能性,它们都有优点和缺点,我永远不知道该选择哪一个。无论如何,这是我的问题,我需要许多不同的松散相关的类来进行验证。但是,其中一些类需要额外的信息来进行验证。我想要一个validate可用于验证 Object 的方法,并且我想确定 Object 是否可以通过接口验证,比如Validatable. 以下是我可以拥有的两个基本解决方案。

这是第一个解决方案,我有一个通用的全局接口,可以验证的东西实现并且我可以validate()用来验证,但 Object1 不支持这个,所以它有点失效,但 Object2 确实支持它,许多其他类也可以。

或者,我可以拥有以下内容,这将使我没有顶级界面。

我认为我遇到的主要问题是我有点坚持拥有顶级接口的想法,因此我至少可以说 X 或 Y 对象是可验证的。

0 投票
6 回答
452 浏览

interface - 界面设计问题

不久前我问了这个问题,基本上该项目几乎包括在浏览器中复制 excel。我们希望人们以类似 Excel 的方式输入数据。我的问题是,最好的控制是什么?我应该使用常规表,然后将列附加到它,还是应该使用数据网格并将其翻转 XtoY?你会采取什么方法?

谢谢你的帮助。

0 投票
2 回答
3558 浏览

c# - 在 .NET 中派生 COM 接口

由于我无法控制的公司限制,我有以下情况:

定义以下接口的 COM 库(没有 CoClass,只有接口):

我有一个 COM(用 C++ 编写),它实现了这两个接口并为我们的应用程序提供了上述服务。一切都很好,我想。

我正在尝试在.NET(C#)中 构建一个新IProvider的。IService

我为 COM 库构建了一个主互操作程序集,并实现了以下 C#:

当我尝试将其滑入现有运行时时,我能够NewProvider从 COM (C++) 和QueryInterfaceIServiceProvider 创建对象。当我尝试调用 IServiceProvider 上的方法时,System.ExecutionEngineException会抛出 a。

我能找到的唯一另一件事是查看由#import 创建的.tlh 文件,它显示了旧的COM IExistingProvider 类正确地表明它是从IServiceProvider 派生的。然而,.NET 类显示了 IDispatch 的基础。我不确定这是否是一个标志、指示、有用的东西,或者别的什么。

0 投票
7 回答
138997 浏览

java - 为什么实现接口的抽象类可能会错过接口方法之一的声明/实现?

当您使用抽象类来实现接口时,Java 中会发生一件奇怪的事情:接口的某些方法可能完全丢失(即既不存在抽象声明,也不存在实际实现),但编译器不会抱怨。

例如,给定接口:

以下抽象类在没有警告或错误的情况下被愉快地编译:

你能解释一下为什么吗?

0 投票
1 回答
4579 浏览

.net - .NET 继承与通用接口

你好,我目前正在玩城堡项目 ActiveRecord 和远程处理设施。

我目前的问题是我需要找到一种方法来在我的地址类中从 IBaseRepository 实现保存子,但我不知道如何。

这是我当前的代码,VS 在“实现 IAddress”行告诉我我必须为 [Shared].IBaseRepository(Of [Shared].IAddress) 实现 Sub Save(obj As IAddress)

并在线 Public Overrides Sub Save(ByVal obj As Address) Implements IBaseRepository(Of IAddress).Save

我无法实现保存,因为 [Shared].IBaseRepository(Of [Shared].IAddress) 中没有 Sub Save

我只是不明白:(请赐教。

蒂亚

0 投票
6 回答
22167 浏览

java - 为什么 Java 中的 final 常量可以被覆盖?

考虑 Java 中的以下接口:

以及以下课程:

为什么类 A 有可能出现并覆盖接口 I 的最终常量?

自己试试:

0 投票
2 回答
388 浏览

java - 界面太一般

在我正在使用的 Java 代码中,我们有一个接口来定义我们的数据访问对象 (DAO)。大多数方法采用数据传输对象 (DTO) 的参数。当 DAO 的实现需要引用特定类型的 DTO 时,就会出现问题。然后该方法需要执行一个(对我来说完全不必要的 DTO 到 SpecificDTO 的强制转换。不仅如此,编译器也不能对 DAO 的特定实现强制执行任何类型的类型检查,它应该只将它们的特定类型作为参数DTOs. 我的问题是:我如何以最小的方式解决这个问题?