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

c# - 为什么我需要一个显式的接口声明?(C#)

我正在尝试实现一个非常简单的接口并使用它来访问本身通过接口访问的类型的属性,如下所示:

但是我收到以下构建错误:

现在我明白错误在说什么,但我不明白为什么。'Other' 实现了 'IOther' 那么为什么会出现问题呢?

一个不完美的解决方案是显式实现接口:

为什么这个样板是必要的?

谢谢。

编辑:假设在我遇到此问题的实际非示例代码中,将 Test 声明为这不是一个选项:

0 投票
0 回答
106 浏览

linker - 非显式接口的链接问题

我正在尝试建立一个用 F90 编写的模型。我一直遇到问题,尤其是在链接阶段。我尝试使用 gfortran 和 ifort 进行编译,但它们都在抱怨未定义的符号。这是编译后 ifort 的错误(gfortran 有非常相似的错误),效果很好

文件 ed_pa​​rams.f90 读取

decomp_coms.f90 是一个模块文件。

这是 Makefile 的重要部分

其中包括以下文件(objects.mk)

和这个其他文件(include.mk.opt.macosx)

查看源文件时,这些错误是有道理的,因为大多数子例程的声明都没有显式接口,即没有 amodule和相应的use语句。

问题是该软件包包含数百个文件,并且通过所有这些文件来更改接口是不可行的。此外,可以在其他平台/编译器上构建相同的包。

因此我的问题是,即使大多数子例程没有显式接口,是否可以提供启用正确链接的编译器选项。感谢帮助

0 投票
2 回答
121 浏览

c# - 为什么.NET BCL 类 ClientBase 明确实现 IDispose

我知道ClientBase<T>该类显式地实现了IDisposable接口,但是我不明白为什么要显式地完成它。 ClientBase 没有实现 IDisposable 成员

如果MyClient派生自ClientBase<T>I 不能Dispose以这种方式明确的对象:

除非我强制转换为底层接口或使用using语句设计模式实现对象生命周期:

Dispose当 Microsoft可以将其公开并允许开发人员显式调用它时,Microsoft 通过显式接口实现隐藏该类上的方法有什么好处?

它不像该类ClientBase<T>正在实现两个具有冲突方法声明的不同接口,因此我认为在这种情况下不需要显式接口实现,除非我错过了什么............

0 投票
2 回答
121 浏览

c# - 为什么我需要在 C# 显式实现中将“this”转换为接口类型?

我有一个界面:

所有实现的对象Profile都有 aName和 an Alias,但有些限制Alias使其始终与Name. 应用此限制的可以Alias这样实现:

由于this在显式接口实现的上下文中只能是类型Profile,并且我们知道它是通过Profile接口而不是包含类或它实现的任何其他接口访问的,为什么需要强制转换?

使用return this.Name;getter 实现会导致此错误:

0 投票
2 回答
5330 浏览

fortran - 指向派生类型子例程的 Fortran 过程指针

在 Fortran 中,我需要一个派生类型中的过程指针,它可以指向几个子例程之一。这个问题似乎在 SO 上很常见:

Fortran 将过程保存为派生类型中的属性

Fortran 2003 中的类型绑定过程重载

此类型绑定的通用子例程调用没有匹配的特定子例程

带有过程参数的通用类型绑定过程

类型绑定过程作为参数

仅举几例。第一个参考资料很好地提供了这个函数问题的答案。

但是,在类型绑定过程指针指向子例程的情况下,我仍然不清楚开发此类代码的方法。困难似乎是没有与返回的内容相关联的类型(因为没有真正“返回”)。

我还想指出一个细微的差别,尽管在较新的 fortran 标准(2003,2008)中可能存在一个简单的解决方案,但该解决方案可能不适用于所有编译器,这在未来可能会出现问题。所以我对编译器友好的解决方案很感兴趣。

我有一个当前有效的小代码(如下所示),但在我的大代码中,我在派生类型中使用过程指针的文件中出现内部编译器错误(如下所示)。我的问题是:我可以对下面的代码做些什么来

1) 严格使用显式接口

2) 最大化传递给编译器的信息

3) 确保代码在尽可能多的编译器之间可移植(即使用fortran 90 / 95 标准)。

以上可以满足到什么程度(1最重要)?是否有可能满足以上所有这些标准?我知道“满足所有这些标准”是主观的,但我认为对于关于函数而不是子例程的同一个问题,答案是“是”。

小代码:

大代码中的编译器错误:

更新

这是一个小的修改,可以为编译器提供更多信息,但我没有在大代码上尝试过。但是,这似乎是任意的,我不知道它是否有帮助。

解决方案评论 只是评论解决方案(由@IanH 提供):还有一个额外的问题,那就是我有一些派生类型进入抽象接口,根据Fortran 2003 的新特性,Import应该包含该语句使抽象接口知道任何进入的派生类型。这是一个小的工作示例,它应用于大代码,减轻了我遇到的内部编译器错误:)

任何帮助是极大的赞赏。

0 投票
1 回答
99 浏览

c# - 在属性网格中显示显式接口成员?

假设我们有这样的代码:

在我们的表单中,我们设置了propertygrid:

不幸的是,PropertyGrid没有显示明确的接口实现。我们应该做什么?

0 投票
2 回答
391 浏览

c# - 为什么对泛型的显式接口调用总是调用基本实现?

为什么在具有接口类型约束的泛型方法中显式 C# 接口调用总是调用基实现?

例如,考虑以下代码:

此代码输出以下内容:

IDerived.Method
IBase.Method

而不是人们可能期望的:

IDerived.Method
IDerived.Method

似乎没有办法(没有反射)调用在运行时决定的类型的隐藏的、更派生的显式接口实现。

编辑:为了清楚起见,以下 if 检查在上面的 GenericMethod 调用中计算为 true:

if (typeof(T) == typeof(IDerived))

所以答案不是因为泛型类型约束“where T: class, IBase”,T 总是被视为 IBase。

0 投票
1 回答
92 浏览

c# - 是否可以使用 Ninject 注入显式实现的方法?

这是我想做的事情:

但是没有任何东西被注入,我开始工作的唯一方法是使用属性和隐式实现:

有没有办法做到这一点?

0 投票
0 回答
89 浏览

python-3.x - 基本python - 多重继承名称冲突

给定python类:

是否可以在 中指定ITextWriterIImageWriter接口的实现MyFileHandler

例如,在 C# 中,这将是:

注意。我知道 Python 中不需要接口 - 它们只是为了说明示例。

这里有一个问题问同样的事情,但不幸的是由于 OP 没有提供太多细节而被关闭。这里这里也有多重继承,但它们分别特定于方法解析顺序和名。

0 投票
1 回答
863 浏览

c# - 如何在 C# 的基类上调用显式接口方法?

C# 有一个有用的显式接口特性,可以让您创建实现接口的方法,同时避免潜在的名称冲突。

你甚至可以在子类中重写这些方法,只要子类也明确列出它实现了接口。

在子类中,您通常可以调用base.Whatever以访问方法的基类版本。但是对于显式接口实现,这种语法是无效的。此外,没有办法将您的基础转换为接口以调用该方法。

如何访问基类的显式接口实现中的逻辑?