问题标签 [explicit-implementation]

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 投票
3 回答
2764 浏览

c++ - C++ - 允许通过基类(接口)访问,禁止通过派生类访问(具体实现)?

假设我有纯抽象类IHandler和派生自它的类:

我想在我的 MyEngine 中继承该类,以便我可以传递MyEngine*给任何期望IHandler*并让他们能够使用process_input. 但是我不想允许访问,MyEngine*因为我不想公开实现细节。

这可以通过受保护的继承和隐式转换来完成吗?我只设法得到:

从“MyEngine *”到“IHandler *”的转换存在,但无法访问

由于我来自 C# 背景,这基本上是 C# 中的显式接口实现。这是 C++ 中的有效方法吗?

额外的:

为了更好地了解我为什么要这样做,请考虑以下几点:

TcpConnection通过 TCP 实现通信,并且在其构造函数中需要指向 interface 的指针ITcpEventHandler。当TcpConnection在套接字上获取一些数据时,它将该数据传递给它的ITcpEventHandlerusing ITcpEventHandler::incomingData,或者当它轮询它使用的传出数据时ITcpEventHandler::getOutgoingData

我的类HttpClient使用TcpConnection(聚合)并将自身传递给TcpConnection构造函数,并在这些接口方法中进行处理。

所以TcpConnection必须实现这些方法,但我不希望用户使用HttpClient直接访问ITcpEventHandler方法(incomingDatagetOutgoingData)。他们应该不能打电话incomingDatagetOutgoingData直接打电话。

希望这能澄清我的用例。

0 投票
2 回答
1738 浏览

c# - 是否可以在公开获取 getter 的同时显式实现属性设置器?

当我定义一个包含只写属性的接口时:

并尝试(天真地)明确地实现它,以使该属性也具有公开可用的 getter:

然后我收到以下错误:

错误“IModuleScreenData.Name.get”添加了在接口成员“IModuleScreenData.Name”中找不到的访问器

但是,在这种替代语法之后,或多或少会出现错误:

编译失败,我想我想做的事情是不可能的。我是对的,还是毕竟有一些秘密的语法

0 投票
1 回答
437 浏览

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

假设我有一个界面:

它由许多类实现,例如

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

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

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

但是,这似乎不起作用。

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

0 投票
4 回答
758 浏览

c# - 声明显式接口并且不包含定义错误 C#

我创建的显式接口存在问题,并且出现异常,

“x”不包含“y”的定义,并且找不到接受“x”类型的第一个参数的扩展方法“y”

我有一系列的课程。基类:

显式实现它的类:

在另一堂课中,我得到了上述错误。Visual Studio 可以找到接口和类,但它无法解析实例属性。我在这里想念什么。我可能错过了显式继承的更精细的规则之一。

0 投票
2 回答
93 浏览

c# - 带有第二个实现的显式接口实现

我正在追踪一个错误,我在 Avalon Dock 2.0 源代码中发现了这个:

ILayoutPreviousContainer有一个成员string PreviousContainerId { get; set; }

这个模式有什么作用?我知道您无法从继承子树外部获取/设置 ,除非PreviousContainerId您先将. 但我不明白你为什么想要这个。LayoutContentILayoutPreviousContainer

在对这种模式进行研究后,我发现这篇SO 帖子让我更加困惑。通过以这种方式实现它,它似乎类似于只拥有一个virtual以复杂方式实现的属性:

我错过了什么吗?

0 投票
1 回答
185 浏览

c# - 使用自动属性显式覆盖

我正在尝试使用 C++/CLI 自动实现的属性来显式覆盖接口。特别是,我写过(在 C++/CLI 中)

IInterface在 C# 中显式使用,可以编写

C++/CLI 不支持 EII,但它支持显式覆盖。例如,可以写

我想使用自动实现的属性来定义我的显式覆盖,但是

产生编译器错误C2146;在标识符之前丢失ObjectC2433virtual数据声明中不允许,C4430:缺少类型说明符,以及C3766:接口成员未实现。我错过了什么吗?实现我所寻求的合适的 C++/CLI 语法是什么?

0 投票
2 回答
624 浏览

c# - 如何对显式接口实现的方法进行单元测试?

我在服务中有以下方法,但我没有在我的单元测试中调用它。该方法使用async/ await代码,而且(我认为这是导致我问题的原因)具有带有点符号的方法名称,老实说,我不确定它的作用是什么?请参阅下面的示例

执行

单元测试

更新

已尝试建议,但无法编译并显示以下错误消息

0 投票
2 回答
314 浏览

c++ - C++ - 显式和隐式命名空间实现差异

如果有人能启发我,我有一个关于命名空间的问题:D

不知道标题对不对,希望是这样xD

“.cpp”文件中的代码称为命名空间的实现, “.h”文件中的代码称为命名空间的声明?正确的?:/

无论如何,我的问题是:

命名空间成员的显式或隐式实现有什么区别(在“.cpp”文件中)?

我的意思是,假设我在“ MyNamespace.h ”中有这个命名空间:

如果在“ MyNamespace.cpp ”中执行此操作(隐式实现) ,则有任何区别

或者这个(显式实现)

?

非常感谢你:D

有一个美好的一天和一个漂亮的编码!(: