问题标签 [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.
c# - 使用new-keyword加入两个接口的方法
我有两个接口 A、B(位于不同的组件中)。两者都声明了一个具有相同签名 ( MyMethod
) 的方法。这两个接口由第三个接口 (C) 继承。
在前两个接口(A,B)中声明的方法旨在始终返回相同的值(对于 A 和 B),因此,我不想在从 C 派生时显式实现接口。
我实现了这一点在使用 new-keyword 时也在第三个接口中声明该方法。
有没有可以预料到的问题,或者这是一种糟糕的风格?
更新
对不起,我最初的问题没有显示完整的故事。当我尝试在 C 的接口引用上调用 MyMethod 时,就会出现问题。编译器不会编译它。
完整示例
c# - 接口的 C# 显式实现破坏了我的 INotifyPropertyChanged
这可能是一个有点愚蠢的问题,但我找不到任何解决方法或想到以下问题的任何解决方案......
正如您从代码中看到的那样,我有一个从 INotifyPropertyChanged 实现的类 Example 和具有 1 个属性 A 的 IExample 接口。
由于我使用的是显式接口实现,我不得不通过我的IExample 接口引用我的 A
这就是我的问题所在。由于A在值更改时显式来自IExamle ,因此不会触发INotifyPropertyChanged ...
这是有道理的。
任何想法/想法如何保持显式接口实现和 INotifyPropertyChanged 并仍然完成工作?
你可能会问我为什么痴迷于显式接口实现
顺便说一句,请随意批评 INotifyPropertyChanged 实现。我觉得我可以重新实现这是一种可以处理显式继承的方法
谢谢大家。
[编辑] 更改了“显式继承与显式接口实现” - 就像 Daniel 纠正了我一样,添加了隐式继承代码。显然其中一个继承应该被注释掉......
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 。所以我仍然很困惑为什么它会给我显式接口错误?target
type(site type)
pointer
sitetype
sitetype
use
ed_state_vars.f90
c# - 如何使用 CodeDOM 创建显式接口声明索引属性
我正在尝试创建一个显式接口声明索引属性。例如:
为此,我编写了以下代码(这适用于普通索引属性,但不适用于显式接口声明索引属性):
但是,这会生成以下代码:
关于如何正确执行此操作的任何想法?
aop - 使用 PostSharp 属性多播排除显式接口方法
假设我有一个界面:
它由许多类实现,例如
我正在使用 PostSharp 属性多播将我的方面 ( MySecurityAspect
) 应用于命名空间中的每个类。
但是我无法弄清楚如何排除显式接口方法实现,即
我曾尝试按照此处的文档,使用以下语句:
但是,这似乎不起作用。
当它们是显式接口实现时,如何使用属性多播排除方法?
c# - 如何正确使用显式实现的接口属性和 wpf 可见性?
我有以下情况:
我有一些 ViewModel 对象,其中一些实现了 interface ISomeInterface
,有些则没有。这些接口公开了一个名为SomeEnumeration
( IEnumerable<T>
) 的属性。
例如:
到目前为止,我的 XAML 的设计方式是两个 ViewModel 都恰好具有我要绑定的属性(即PropertyA
、PropertyB
等)。我还没有遇到我要绑定的属性在我设置为DataContext
. 但是,现在我将......并且它将针对明确实现的属性(我不确定这是否会对 WPF 绑定引擎产生任何影响)。
基本上,我的 xaml 将如下所示:
我不确定这是否会起作用,因为:
- 不是每个
DataContext
都包含该属性(如果没有,它应该被隐藏)......在这种情况下我该怎么办? - 对于
DataContext
包含该属性的 s ,它是显式实现的……你必须先转换还是什么?
c# - 为什么 RabbitMQ 的 SimpleRpcServer 使用 Dispose() 的显式接口实现?
RabbitMQ.Client.MessagePatterns.SimpleRpcServer类使用显式接口实现来实现 IDisposable 。实现是:
这意味着为了调用Dispose()
这样的对象,我首先必须将其强制转换为 IDisposable。为什么 Dispose 方法是这样声明的?我应该费心在 SimpleRpcServer 对象上调用 Dispose() 吗?我可以忘记它并简单地打电话Close()
,我只是问,因为 FxCop 给了我一个警告,而且我认为我以前没有见过明确的接口实现。
c# - 为什么在显式的仅 getter 接口实现上使用私有 setter 是非法的?
我倾向于支持显式接口实现而不是隐式实现,因为我认为针对接口而不是针对实现进行编程通常更可取,而且在处理 Web 服务时,它通常是必要的。
也就是说,我想知道为什么以下内容对于显式接口声明是非法的,而对于隐式声明是合法的:
我知道如何解决这个问题,因为同时拥有显式和隐式接口是合法的,而且我可以使隐式接口实现完全私有。
然而,我想知道这背后的原因。因为从技术上讲,内部编译的私有方法set_IConnection_ConnectionString
不需要是接口的一部分,对吧?它可以被视为一个辅助设置器,而不是接口的一部分,因为它在隐式实现情况下。
更新:作为奖励,您收到的看似令人困惑且在我看来不太正确的编译错误如下:
访问器的可访问性修饰符必须比属性 Connection1.ConnectionString 更具限制性
打扰一下,比更严格private
,怎么……什么?
c# - 无法检索显式接口实现成员
我正在使用 Roslyn 分析 C# 代码,并且在使用显式实现的接口时遇到了问题。给定实现接口的类型,我无法按名称检索显式实现的成员。例如:
只有当类型位于命名空间中时,才会出现这种情况,以下代码可以正常工作。
有谁知道为什么会这样?有没有更好的方法来使用显式实现的接口?
c# - 每个接口都显式实现?(涉及国际奥委会)
我非常清楚这样一个问题可能已经发布了。然而,由于 IoC 在这种情况下的参与以及大量代码,我在一家我刚入职的公司中看到一位同事提出了这个问题。
设想:
在一个产品的代码库中,这位同事构建的每个接口都是明确实现的。整个应用程序是通过结构映射构建的,但在某些地方使用和转换的具体类型是这样的
背景:
那位同事在询问显式实现所有接口是什么后向我解释说,他们最近引入了 StructureMap,许多人仍然会使用具体类型。因此,从本质上讲,它是一种“教育”公司人员的手段。
我对此事的看法:
首先,切换到 StructureMap 已经在几年前完成了,虽然这在某种程度上迫使更多地使用接口,但在我看来这不是正确的方法。在我看来,了解具体类型的人可以看到实现,并且很容易看到我上面展示的内容......只需投射它。清晰的通信或编码约定会使这变得更好。如果使用 IoC 而没有具体的类,那么显式实现接口是完全没用的。
我也听说这真的会弄乱继承,但不知道一个例子。我还看到Jon Skeet有点不喜欢以上述方式使用它,而是使用它打算使用的方式,比如 IEnumerable<> 和其他名称冲突。
任何人都可以为我阐明这件事。优点和缺点(尽管我非常倾向于不这样做,因此我在这里发帖),尤其是其中一个或另一个的原因。
谢谢!
编辑:我很清楚这不是对与错的问题,也没有真正的答案。这更像是一个学习了解每种方法的缺陷的问题。为什么我会在一种情况下使用一种而不是另一种方法?