问题标签 [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 回答
324 浏览

c# - 显式标准 .NET 接口实现

我需要显式实现标准 c# 接口,例如 ( IComparable, IComparer, IEquatable, IEnumerable, IEnumerator)。我做对了吗?

现在主要:

所以你怎么看?

另一个问题是当我遍历集合时如何访问方法 diamond ?

0 投票
1 回答
1138 浏览

c# - 如何使用显式接口事件?

所以我做了几个这样的接口:

实现这些接口中的这​​个(或几个)的任何类都有点混乱,所以我认为使用显式接口实现来隐藏不常见的事件和属性是有意义的。但是,这样做,我得到了一个编译器错误:

事件的显式接口实现必须使用事件访问器语法

谷歌搜索它让我看到这篇相当有用的博客文章

这暗示了编写您自己的添加和删除访问器的主要原因之一:提供您自己的底层数据存储。您可能想要这样做的一个原因是,如果您的类中有很多公开的事件,但是在任何时间点通常只有少数事件在实例上使用。在这种情况下,可能存在与为每个事件维护委托字段相关的大量内存开销。

这究竟是如何节省资源的?似乎该事件的委托调用列表将为空,但是如果您使用自己的自定义处理程序,它将如何以及何时实际实例化?一切都被隐藏起来了!

0 投票
1 回答
237 浏览

c# - 与 IEnumerable 相关的显式接口实现执行?

为什么在这个MSDN 示例中需要GetEnumerator1方法?

0 投票
1 回答
48 浏览

c# - 需要显式接口实现,但只使用一个接口?

为什么以下代码必须使用显式接口实现语法定义“CalcUsable”?(见最后一行代码)如果我使用非显式语法,(即公共十进制 CalcUsable)我会收到“不一致的可访问性”错误,具体来说:

“参数类型 ...List (IVoucher) 比方法 CalcUsable(...) 更难访问”

0 投票
1 回答
1019 浏览

c# - 如何通过接口继承重新定义C#中的属性?

我有一个接口“IBase”,它指定一个可为空的 int。稍后的接口“IDerived”隐藏了可为空的 int 并将其“重新定义”为不可为空。

实现这些接口的类必须显式实现 hidden 属性,但它是私有的,因此客户端看不到它。

但是,即使它是私有属性,我仍然可以通过 IBase 接口访问它!

这似乎是对 C# 访问修饰符的某种违反,但无论哪种方式,这都不是我重新定义(而不仅仅是隐藏)属性的真正想法。从某种意义上说,它按照您的要求进行操作是正确的,得到一个具有可为空的 int 的 IBase 接口,但这对于可能修改错误版本属性的客户端来说是不直观的。

我真正想要的是,如果客户端访问 IBase.Redefinable,那么它的行为就好像它正在访问 IDerived.Redefinable 属性,即 TheClass 的“真实”属性。这样它实际上就被重新定义了,就像在层次结构中一样。

这就像一个黑客,几乎就像我错过了什么,所以我想问是否有人知道实现可重新定义属性的更好/替代方法?

0 投票
1 回答
677 浏览

c# - Dynamic and Explicit Generic Interface Implementation

I've learnt from here that dynamic variables cannot access methods on interfaces they explicitly implement. Is there an easy way to invoke the interface methods when I don't know the type parameter T at compile time?

I don't know the type parameter T, so (as far as I know) I can't cast my dynamic variable x. I have lots of methods in the interface, so don't really want to create corresponding DoXXX() pass through methods.

Edit: Note that I don't control and cannot change C or I.

0 投票
2 回答
55 浏览

c# - 如何在 C# 中访问复杂类型参数

我正在尝试使用一项 WCF 服务,因为我们没有获得 XSD 和 WSDL 的服务 URL。目前正在为此尝试 POC 的东西。使用svcutil工具生成的类文件。我对 WCF 的东西不是很熟悉,所以首先尝试在 C# 中使用这些类。

以下是我的完整代码:

在最后一行我无法调用接口方法。

0 投票
1 回答
185 浏览

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

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

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

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

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

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

0 投票
3 回答
3102 浏览

c# - 依赖注入和显式接口实现

在依赖注入方面显式实现接口是否有好处?

据我了解,接口可以显式或隐式实现:

现在显式实现只能通过调用接口方法来调用,而隐式实现可以直接在类的实例上调用:

因此,使用显式接口实现,不能意外调用具体类的方法,但必须调用接口方法。这是否会阻止紧密耦合的代码作为 DI 的一个目的,还是我在这里吠叫错误的树?毕竟,不能意外地编写一个构造函数或方法来注入一个具体的类而不是一个接口:

0 投票
3 回答
102 浏览

c# - 显式接口和通用/动态类型转换

在我陈述我的问题之前,让我提供一些关于我正在尝试做的事情的背景信息,因为也许有更好的方法来实现它。

我有一个类C继承了两个接口AB.

C 为DoStuff.

我当然知道DoStuff可以像下面这样调用。

我想要做的是避免转换CAor B,然后DoStuff调用Aor B

所以我的想法是我可以实现一个通用的方法来为我做这件事,所以我首先尝试这样。

当然,考虑到您可以转换thisT并导致编译器错误,这当然行不通,所以我的下一步是尝试创建一个静态方法,该方法通过实例this然后在那里进行转换。

我没想到会奏效,但值得一试。正如我所料,它会导致编译器错误,因为From无法显式转换为To.

我最后的手段是使用dynamic关键字,当然它会顺利通过ConvertToDoStuffInterface,但是一旦我尝试调用它,我有点怀疑它可能会DoStuff抛出一个。RuntimeBinderException我知道为什么会抛出异常,这当然是因为它无法将结果正确绑定ConvertToDoStuffInterface到任何类型,并且我假设需要某种类型的转换。

这是dynamic用法的代码。

不过我的问题是,如果没有更好的方法可以使用泛型来实现这一点,或者dynamic,我将如何进行从dynamicto的转换T?有没有一种方法可以检查传递的类型DoStuff<T>是否有方法DoStuff,然后允许我最初尝试的内容?

为了澄清我想要做的事情是这样的

这是我的C实现。