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

c# - 使用new-keyword加入两个接口的方法

我有两个接口 A、B(位于不同的组件中)。两者都声明了一个具有相同签名 ( MyMethod) 的方法。这两个接口由第三个接口 (C) 继承。

在前两个接口(A,B)中声明的方法旨在始终返回相同的值(对于 A 和 B),因此,我不想在从 C 派生时显式实现接口。
我实现了这一点在使用 new-keyword 时也在第三个接口中声明该方法。

有没有可以预料到的问题,或者这是一种糟糕的风格?

更新
对不起,我最初的问题没有显示完整的故事。当我尝试在 C 的接口引用上调用 MyMethod 时,就会出现问题。编译器不会编译它。

完整示例

0 投票
1 回答
975 浏览

c# - 接口的 C# 显式实现破坏了我的 INotifyPropertyChanged

这可能是一个有点愚蠢的问题,但我找不到任何解决方法或想到以下问题的任何解决方案......

正如您从代码中看到的那样,我有一个从 INotifyPropertyChanged 实现的类 Example 和具有 1 个属性 A 的 IExample 接口。

由于我使用的是显式接口实现,我不得不通过我的IExample 接口引用我的 A

这就是我的问题所在。由于A在值更改时显式来自IExamle ,因此不会触发INotifyPropertyChanged ...

这是有道理的。

任何想法/想法如何保持显式接口实现和 INotifyPropertyChanged 并仍然完成工作?

你可能会问我为什么痴迷于显式接口实现

顺便说一句,请随意批评 INotifyPropertyChanged 实现。我觉得我可以重新实现这是一种可以处理显式继承的方法

谢谢大家。

[编辑] 更改了“显式继承与显式接口实现” - 就像 Daniel 纠正了我一样,添加了隐式继承代码。显然其中一个继承应该被注释掉......

0 投票
2 回答
20160 浏览

compilation - Fortran - 显式接口

我对 Fortran 很陌生,为了我的研究,我需要让一个模型怪物运行,所以我边走边学。所以如果我问一个“愚蠢”的问题,我很抱歉。我正在尝试编译(Mac OSX,从命令行)并且我已经设法解决了一些问题,但是现在我遇到了一些我不确定如何解决的问题。我想我明白了错误背后的想法,但同样,不知道如何解决。

这个模型很大,所以我只会发布我认为相关的代码部分(尽管我可能是错的)。我有一个包含几个子例程的文件,开头是:

我收到错误消息

预算实用程序.f90:20.54:

real , external :: compute_co2_storage 1
错误:(1) 处的过程“compute_co2_storage”的虚拟参数“csite”具有需要此过程的显式接口的属性

(我得到了一堆,但它们基本上都是一样的)。现在,查看 ed_state_vars.f90 (在子程序中“使用”),我发现

等等等等 - 这需要另外 500 行左右。因此,为了能够使用(虚拟)参数 csite,原始子例程似乎需要为其过程提供显式接口。同样,我对 Fortran 很陌生,但我真的很想了解它是如何“思考”的。我一直在寻找拥有显式接口的含义,何时(以及如何!)使用它等。但我无法弄清楚它在我的案例中是如何应用的。我是否应该使用不同的编译器(英特尔?)。有什么提示吗?

编辑:So在所有过程中都csite被声明为 a ,并且声明中包含一大堆s,如. 但是在所有程序中都从另一个模块 ( ) 中正确d 。所以我仍然很困惑为什么它会给我显式接口错误?targettype(site type)pointersitetypesitetypeuseed_state_vars.f90

0 投票
1 回答
1023 浏览

c# - 如何使用 CodeDOM 创建显式接口声明索引属性

我正在尝试创建一个显式接口声明索引属性。例如:

为此,我编写了以下代码(这适用于普通索引属性,但不适用于显式接口声明索引属性):

但是,这会生成以下代码:

关于如何正确执行此操作的任何想法?

0 投票
1 回答
437 浏览

aop - 使用 PostSharp 属性多播排除显式接口方法

假设我有一个界面:

它由许多类实现,例如

我正在使用 PostSharp 属性多播将我的方面 ( MySecurityAspect) 应用于命名空间中的每个类。

但是我无法弄清楚如何排除显式接口方法实现,即

我曾尝试按照此处的文档,使用以下语句:

但是,这似乎不起作用。

当它们是显式接口实现时,如何使用属性多播排除方法?

0 投票
2 回答
3629 浏览

c# - 如何正确使用显式实现的接口属性和 wpf 可见性?

我有以下情况:

我有一些 ViewModel 对象,其中一些实现了 interface ISomeInterface,有些则没有。这些接口公开了一个名为SomeEnumeration( IEnumerable<T>) 的属性。

例如:

到目前为止,我的 XAML 的设计方式是两个 ViewModel 都恰好具有我要绑定的属性(即PropertyAPropertyB等)。我还没有遇到我要绑定的属性在我设置为DataContext. 但是,现在我将......并且它将针对明确实现的属性(我不确定这是否会对 WPF 绑定引擎产生任何影响)。

基本上,我的 xaml 将如下所示:

我不确定这是否会起作用,因为:

  1. 不是每个DataContext都包含该属性(如果没有,它应该被隐藏)......在这种情况下我该怎么办?
  2. 对于DataContext包含该属性的 s ,它是显式实现的……你必须先转换还是什么?
0 投票
3 回答
412 浏览

c# - 为什么 RabbitMQ 的 SimpleRpcServer 使用 Dispose() 的显式接口实现?

RabbitMQ.Client.MessagePatterns.SimpleRpcServer类使用显式接口实现来实现 IDisposable 。实现是:

这意味着为了调用Dispose()这样的对象,我首先必须将其强制转换为 IDisposable。为什么 Dispose 方法是这样声明的?我应该费心在 SimpleRpcServer 对象上调用 Dispose() 吗?我可以忘记它并简单地打电话Close(),我只是问,因为 FxCop 给了我一个警告,而且我认为我以前没有见过明确的接口实现。

0 投票
5 回答
4836 浏览

c# - 为什么在显式的仅 getter 接口实现上使用私有 setter 是非法的?

我倾向于支持显式接口实现而不是隐式实现,因为我认为针对接口而不是针对实现进行编程通常更可取,而且在处理 Web 服务时,它通常是必要的。

也就是说,我想知道为什么以下内容对于显式接口声明是非法的,而对于隐式声明是合法的:

我知道如何解决这个问题,因为同时拥有显式和隐式接口是合法的,而且我可以使隐式接口实现完全私有。

然而,我想知道这背后的原因。因为从技术上讲,内部编译的私有方法set_IConnection_ConnectionString不需要是接口的一部分,对吧?它可以被视为一个辅助设置器,而不是接口的一部分,因为它在隐式实现情况下。

更新:作为奖励,您收到的看似令人困惑且在我看来不太正确的编译错误如下:

访问器的可访问性修饰符必须比属性 Connection1.ConnectionString 更具限制性

打扰一下,比更严格private,怎么……什么?

0 投票
2 回答
273 浏览

c# - 无法检索显式接口实现成员

我正在使用 Roslyn 分析 C# 代码,并且在使用显式实现的接口时遇到了问题。给定实现接口的类型,我无法按名称检索显式实现的成员。例如:

只有当类型位于命名空间中时,才会出现这种情况,以下代码可以正常工作。

有谁知道为什么会这样?有没有更好的方法来使用显式实现的接口?

0 投票
2 回答
134 浏览

c# - 每个接口都显式实现?(涉及国际奥委会)

我非常清楚这样一个问题可能已经发布了。然而,由于 IoC 在这种情况下的参与以及大量代码,我在一家我刚入职的公司中看到一位同事提出了这个问题。

设想:

在一个产品的代码库中,这位同事构建的每个接口都是明确实现的。整个应用程序是通过结构映射构建的,但在某些地方使用和转换的具体类型是这样的

背景:

那位同事在询问显式实现所有接口是什么后向我解释说,他们最近引入了 StructureMap,许多人仍然会使用具体类型。因此,从本质上讲,它是一种“教育”公司人员的手段。

我对此事的看法:

首先,切换到 StructureMap 已经在几年前完成了,虽然这在某种程度上迫使更多地使用接口,但在我看来这不是正确的方法。在我看来,了解具体类型的人可以看到实现,并且很容易看到我上面展示的内容......只需投射它。清晰的通信或编码约定会使这变得更好。如果使用 IoC 而没有具体的类,那么显式实现接口是完全没用的。

我也听说这真的会弄乱继承,但不知道一个例子。我还看到Jon Skeet有点不喜欢以上述方式使用它,而是使用它打算使用的方式,比如 IEnumerable<> 和其他名称冲突。

任何人都可以为我阐明这件事。优点和缺点(尽管我非常倾向于不这样做,因此我在这里发帖),尤其是其中一个或另一个的原因。

谢谢!

编辑:我很清楚这不是对与错的问题,也没有真正的答案。这更像是一个学习了解每种方法的缺陷的问题。为什么我会在一种情况下使用一种而不是另一种方法?