问题标签 [explicit-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 投票
1 回答
132 浏览

c# - 索引器 - 显式接口成员实现

我需要一个索引器的显式接口成员实现的工作示例程序。

微软的索引器 c# 文档指出这是可能的,但没有提供一个工作示例(至少对我来说这个示例不起作用)。我需要一个可以做到这一点的工作程序。

0 投票
3 回答
59 浏览

c# - 为什么调用哪个接口方法很重要?

我正在研究接口,并且在某个时候我来到了显式接口实现。在大约 2:55的一个教程视频中,它说当一个类继承 2 个不同的接口时,如果这两个接口具有同名的方法,那么将调用哪个接口的方法存在歧义。

我很困惑,因为接口没有方法定义,那么为什么调用哪个接口的方法很重要?两种方法同名。

0 投票
1 回答
455 浏览

pointers - 通过类型/种类/等级以外的方式区分 Fortran 中的泛型

大量使用非1索引ALLOCATABLE数组,我希望知道它们的实际下限(以及上限),因为它们被赋予为IN/ INOUTargs 的过程(所以我将这些虚拟参数声明为延迟形状数组以制作它们与它们的界限一起传递;参见f_deferred_all示例代码)。

但。

有时这些过程(在数据声明部分之后)可以处理作为子数组的实际参数,所以当需要时,我通常最终制作一个过程的副本,更改其参数声明及其名称(参见过程f_assumed)。最好通过INTERFACE. 但是标准说我不能,因为

特定过程或绑定的接口通过其参数的固定属性来区分,特别是类型、种类类型参数、等级以及虚拟参数是否具有 POINTER 或 ALLOCATABLE 属性。

在下面的示例程序中,我通过使用指针实参和伪参数克服了这个“限制”(请参阅​​ 参考资料f_deferred_ptr)。

  1. 这个“解决方案”是否以某种方式被弃用、不鼓励、危险或其他什么?我问这个是因为我真的没有POINTER这么多地使用 s 。

此外,我定义了一个pntr函数,该函数将 a 返回POINTER到它的唯一(非ALLOCATABLE数组或数组的一部分)INput 参数,这样我就可以“内联”使用它而无需POINTER在主程序中定义 a 并且我没有将TARGET属性放在实际参数上。

  1. 我是否通过使用pntr创建了一个临时数组?我认为是的,但我不确定POINTER在主程序中定义和关联它是否会在这方面产生影响。
  2. 是否有可能/是否计划/更改标准以允许在仿制药之间进行这种区分是否有意义?如果这些建议有意义,在哪里发布这些建议?

这里的例子如下。

0 投票
0 回答
85 浏览

swift - 是否可以仅显式地遵守协议?

第一件事。因为我知道这是不可避免的,所以这里有一个关于同一主题的类似问题。虽然主题相同, 但其推理/用法的意图不同。因此,解决 这个问题与实现我在这里提出的问题不同。因此,请在将其标记为重复之前阅读我要解决的问题。谢谢!

在 Swift 中,我们使用与其他语言中的接口相似(但不完全相同)的协议。我在其他语言(例如 C#)中看到的一件事是隐式和显式实现接口的能力。我想知道 Swift 是否具有后者的能力。

这是使用 Swift 语法显示的概念。请注意,这不会编译。它只是说明性的。

同样,上面是伪代码,但说明了其他语言如何支持此功能。

显式一致性的优点和好处

显式一致性的第一个优点是您可以遵循协议而不会弄乱您自己的接口。

例如,如果您有十个协议都定义了一个日期,它在功能上与您模型中的日期匹配,但它们使用十个不同的名称,显式一致性将允许您符合所有十个,而不必公开公开你界面上的那十个不同的名字。(即上面,即使它符合which expects也Invoice只能直接暴露。)invoiceDateDateSortablesortDate

第二个优点是它可以保护您免受成员命名冲突。

考虑两个不相关的协议,例如OrderableDeliverable不幸地为其成员选择了相同的名称,var date:Date{ get }并且它们不属于您。它们位于您正在使用的框架中。

现在在您自己的PurchaseItem模型中,您同时拥有orderDatedeliveryDate。明确的一致性将解决这个问题,就像这样......

简而言之,显式接口声明让您可以按功能关联事物,而不仅仅是盲目地按名称。如果您愿意,您仍然可以按名称关联它们,因为这是自动的,但这不再是必需的。

那么,Swift 有没有和上面类似的东西呢?

关闭,但不完全!

我能想到的最接近的事情是一个私有扩展,在需要它的站点上添加对该协议的一致性,就像这样......

但是,如此处所示,这种方法存在局限性和警告。诚然,该问题的需要是不同的,但注意事项保持不变。

0 投票
0 回答
29 浏览

c# - 是否可以使用具有显式接口实现的自动属性?

我有一个看起来像这样的界面

还有一个看起来像这样的类:

我想使用接口的显式实现,因为这些不是我的类的消费者通常应该调用的方法。这可行,但理想情况下,我想删除支持 isFrozen 字段。

我可以将阅读参考更改为if (this.isFrozen)足够if (((IFreezableEntity)this).IsFrozen)简单。

我的问题是,如果我将其定义为自动属性

那么我看不到如何设置它的值,除非我:

  • 向 IFreezableEntity 添加一个设置器(我不想要)
  • 将其转换为具有私有集的常规公共财产(我不妨离开private bool isFrozen;

我的目标是将其 IFreezableEntity 逻辑的属性与 Foo 中的其他逻辑封装在一起。

0 投票
1 回答
244 浏览

c# - 使用 MongoDB C# 驱动程序使用显式接口查询时出现异常

我需要使用显式接口作为FilterDefinition来构造查询,但它会引发异常说:

我已经用普通的接口实现尝试了这个,它按预期工作。但是我需要显式实现一个接口,因为我有 2 个具有相同属性名称的接口,如下面的代码所示:

因此,我创建了一个将在Find中使用的FilterDefinition。正如我之前提到的,如果它不是一个实现,这很好。例如:如果只使用其中一个通常实现而另一个显式使用,它将在查询正常的时起作用。但是具有上述代码约束并像这样创建过滤器:explicit interface

因此,当使用该过滤器执行 Find 时,会引发上述异常。

注意: MongoQueryBuilder.AddFilter 只是我为使其更容易而做的一个包装器,但这不是问题,因为所有其他查询都可以使用它正常工作。

我希望在仅正常实现一个接口并使用该接口成员查询时得到结果,但在我当前的情况下,我需要同时实现它们,因此必须显式实现它们。

我可能没有正确地做某事或按我应该的方式使用它,但我还没有找到任何解决方案。

编辑:(感谢@Lakerfield 的回答)

当我要求报价时,我无法找到指针,而作为指针,它无法公开找到它。所以,我能够像这样解决它:explicit interface

然后像这样进行查询:(现在我使用Linq而不是FilterDefinition但这与此解决方案无关)

offer.ServiceCategoryPointer是公开可用的,它是Offer的成员。

0 投票
1 回答
76 浏览

c# - 如何同时添加新成员和覆盖抽象成员?

假设您有 interfaceIFoo和一些 member Member。实现它的类能够实现来自接口的成员,同时添加具有完全相同名称的“新”成员。

这真的很棒。现在我想拉一些类似的东西,但不是来自接口,而是来自抽象类。我希望与接口类似的行为 - 具有抽象类的实例,将看到原始成员,具有派生类的实例,将看到“新”成员并隐藏原始成员。

我有这样的想法:

有什么机制允许这样做吗?

更新: 中有 2 个成员Foo,我刚写了两次尝试。用法与接口相同:

0 投票
1 回答
233 浏览

entity-framework - 在实体类中使用显式接口实现时,EF Core 不会在表中创建列

我为什么要这样做?因为如果我更改接口并删除一个属性,那么应该有编译时错误,即接口中没有声明属性,其实现存在于类中。这样我可以从类中删除实现。但是,如果我不在类中使用接口名称使用显式实现,那么如果我从接口中删除一个属性,那么相应的属性将被视为类本身的属性。

我试过这样做

但是有一个堆栈溢出异常,我要附加图像

我面临的错误

0 投票
4 回答
89 浏览

c# - 如何调用作为显式接口实现的基本函数?

基本问题(伪代码):

有没有办法在不从类中删除显式实现的情况下完成这项工作A

0 投票
1 回答
73 浏览

external - 在 Fortran 中为 Lapack 使用显式接口:链接查找模块文件失败

问题

为Lapack添加外部接口后,与消息链接时代码失败

似乎链接器正在寻找我的安装DGESVD.mod中未包含的文件。openblas

代码

这有效

模块module mSolutionSVD使用了声明

external DGESVD

指向 BLAS 例程并contains subroutine svd_pseudoinverse_solve_sub 调用DGESVD.

这失败了

声明被显式接口替换

背景

kind 语句来自具有以下语句的例程:

问题

我们可以为 Lapack 使用外部接口而无需重新编译 Lapack 吗?