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

java - 实现通用工厂

我正在尝试为可插拔接口设计一个工厂。这个想法是,一旦您拥有工厂实例,工厂将为该特定实现返回适当的子类。

在这种情况下,我包装了一个第三方库,它使用字符串来表示 ID 代码,而不是子类。因此,在包装其库的实现中,每个实现类都有一个getCode()接口 API 未明确要求的方法。我正在使用一个enum来存储代码和接口类之间的这种映射。

在几乎所有情况下,getCode()都不需要该方法。但是,在实现包中的少数情况下,我需要访问该方法。因此,我的问题是我想让 Factory 实现的签名告诉调用者,getCode如果他们有对特定 Factory 实现的引用,则该方法存在

接下来是我尽最大努力将情况消化成sscce的大量代码。我知道它很长,但它比看起来更简单,sscce 中的一个词是“完整”。

公共 API:

示例用例:

SSCCE 版本的实现:

枚举代​​码映射器:

实施包中的示例用例:

工厂尝试:

这并没有指定返回将始终实现ICode。但是传入的接口类没有实现ICode,这就是重点。

我该怎么办?

0 投票
1 回答
4439 浏览

c# - 基类实现基接口,而派生/具体类实现扩展接口,为什么?

我正在关注一本书,即“.NET Domain Driven Design with C#”。

问题基于如下类图中所示的场景:

图: http ://screencast.com/t/a9UULJVW0

在这张图中,

A)IRepository 接口由(抽象基类)RepositoryBase 实现,而,

B) IRepository 接口也由接口 ICompanyRepository (ICompanyRepository : IRepository) 扩展。

C) ICompanyRepository 由派生自 SQLRepositoryBase 的 CompanyRepository 实现,该 SQLRepositoryBase 派生自 RepositoryBase (; 如 A 点所述,它实现 IRepository,如果 ICompanyRepository 是父级)。

D)我创建了一个接口 ICompanyRepository 的变量,该变量引用了类 CompanyRepository 的对象,如下所示:

现在,如果我用 ICompanyRepository 变量 comRep 调用 Add() 函数...

然后调用 RepositoryBase 类(CompanyRepository 的父级)中的 Add() 函数。

我的问题: 由于调用(abstract-base)类“RepositoryBase”中的函数 Add() 而发生的确切的底层面向对象规则/机制是什么?为方便起见,我在下面说明两种可能的机制:(请告诉我以下两种机制中的哪一种是正确的基础机制)

Mechanism-1 基类“RepositoryBase”中的这个 Add() 函数是否因为“RepositoryBase”实现了 IRepository 而被调用?(因此,RepositoryBase 类必须实现 IRepository 才能调用 Add() )

或者

机制2: 调用基类“RepositoryBase”中的 Add() 函数是因为 CompanyRepository 实现了 ICompanyRepository,它实现了 IRepository,其中包含 Add() 函数的定义,这样当在 ICompanyRepository 上调用 Add() 函数时(带有变量),它首先找到定义在 ICompanyRepository 中添加,然后在父接口 IRepository 中添加,然后跳转到 CompanyRepository 类以查找 Add() 函数的实现,但没有找到 Add() 函数的定义,它向上遍历父类 SQLRepositoryBase 以查找 Add() 函数等,并且当它在 RepositoryBase 类中找到函数 Add() 时,它会调用 RepositoryBase 中的 Add() 函数。这意味着如果它在 RepositoryBase 的任何派生类中找到 Add() 函数,它没有进一步向上遍历(在父类中)。所有这一切也意味着,为了在类链中从派生类遍历到父类只是为了找到 Add() 函数,RepositoryBase 类真的不需要直接从 IRepository 继承吗?


我的问题中还有其他内容,我无法理解在我的案例中应用了哪个 OO-Rule,如下所述:

在我的问题中有两个接口,一个是父接口,即 IRepository,另一个是扩展它,即 ICompanyRepository。父接口 IRepository 包含 Add() 函数的定义,但不包含子接口 ICopmanyRepository。

类层次结构“CompanyRepository”链中的最后一个派生类实现了 ICompanyRepository(CompanyRepository 不实现 IRepository 接口的 Add() 函数),而根(最顶层的父)(抽象基)类即 RepositoryBase 实现了 Add() 函数。

所以结构就像http://screencast.com/t/a9UULJVW0中显示的图像。

现在,如果我调用 Add() 函数:

codeICompanyRepository lastDerived = new CompanyRepository(); ICompanyRepository->Add();code

然后根据您在回答中陈述的 OO 规则,查找将从 CompanyRepository 类开始,期望 CompanyRepository 将 Add() 函数实现为 codeIRepository.Add() { } //从 [链接] 中的 P17 和 P18 推导出http://www.codeproject.com/Articles/18743/Interfaces-in-C-For-Beginners[链接]code

但是,在我的例子中,CompanyRepository 类没有实现 IRepository.Add() { } 尽管控制流(在跟踪时)成功地跳转到基类中的 Add() 函数(并且代码工作正常)。我无法理解这里应用的是哪个 OO 规则?

如果您需要我用代码展示上述场景,请告诉我。

0 投票
0 回答
43 浏览

visual-studio-2010 - 自动实现接口/抽象类时,Visual Studio 可以添加导入而不是 FQN 吗?

正如问题所暗示的那样,我正在寻找某种设置(如果存在)来告诉 VS 2010 Professional 添加“使用”语句而不是类型名称的可怕 FQN。请不要打扰建议我 Resharper 或其他任何东西,我对内置解决方案感兴趣。谢谢你。

0 投票
3 回答
1474 浏览

c# - 如何调用具有接口作为 C# 中的参数之一的方法?

我有以下方法(在我的 dll 中实现的第 3 方 sdk 方法):

接口参数如下:

我想从一个函数中调用这个方法。我知道在调用此方法时如何将对象作为第一个参数传递。但是我如何传递第二个参数(接口)。任何帮助是极大的赞赏。

0 投票
1 回答
580 浏览

c# - DataObjectSerializer 接口实现 CS0535

我正在尝试使我的项目的一个类可序列化,以便我可以通过网络为客户端/服务器应用程序交换它的对象。

因为我还想包含“子”对象和私有成员,所以我选择在 DataContractSerializer 的帮助下这样做。

然而,虽然我懒洋洋地试图从MSDN 各自的站点中复制粘贴我的初稿,但并没有得到好的结果。我已经引用了 System.Runtime.Serialization.dll 以及所有相关的命名空间。

这是我的问题:尝试编译时,我得到

CS0535“Server.Anfrage”未实现接口成员“System.Runtime.Serialization.IExtensibleDataObject.ExtensionData”(CS0535)

虽然我得到了我的指定成员实施。现在我只是想让它与 3 个字符串一起工作,但以后会更多。

谁能告诉我为什么会出现上述错误?非常感谢。

0 投票
1 回答
514 浏览

c# - 实现“继承”(实现)通用接口的接口?

如果我想创建一个可以完成所有 4 个任务的大乌龟怎么办?我想编码:

Fight()这可能吗,因为现在看来我必须实施EatPizza()4 次。但我认为这两个常见的功能会解决,只需要实现一次,对吧?

我可以在不继承的情况下创建 4 个中间接口ITurtle,然后GrandTurtle实现ITurtle。这解决了接口继承问题,但现在它看起来在语义上是错误的,因为它ITurtle看起来像第五个兄弟,但事实并非如此。另外,我希望能够创建特定于海龟的类,例如class BostonLeonardo : ILeonardo.

我从很多地方读过,这似乎是一场无休止的争论——有人说“接口内的继承”完全可以,而那些说不是——要么我不明白他们的解释,要么他们只是说这是不好的做法,没有解释为什么。

0 投票
2 回答
613 浏览

java - 使用附加接口实现在 Java 中实例化匿名内部类

假设我有以下两个类/接口定义:

如果我想创建一个扩展/实现两者的匿名内部类,我是否需要这样做:

或者是否有一条捷径可以让我不定义BothClass?像这样的东西,也许:

(这个想法给了我几个错误,这里没有一个有帮助)

0 投票
3 回答
6500 浏览

c# - 在 C# 接口实现中覆盖等于

我有一个实现接口的类,例如:

平等是根据 PropA 和 PropB 确定的。当覆盖 AClass 的 Equals 方法时,我是否应该尝试将 obj 转换为 AClass,如下所示:

或者我应该尝试将 obj 转换为 IInterface,如下所示:

0 投票
3 回答
1181 浏览

c# - 接口实现了两次“类型可以统一”;为什么这种解决方法有效?

尝试为同一个类实现两次接口时遇到编译器错误,如下所示:

错误:

'Mapper' 不能同时实现 'IMapper' 和 'IMapper' 因为它们可能会针对某些类型参数替换进行统一。

为什么这种解决方法有效?我想知道我是否已经解决了问题或只是欺骗了编译器。

编辑:我已经更新了MyClass,MyClassBaseIMyInterfaceto Mapper, MapperBase, andIMapper来代表这个问题可能会出现的更真实的场景。

0 投票
2 回答
40 浏览

java - 对象作为参数?

我之前问过一个关于在 Java 中按子类实现一个类的问题,我发现使用了不同的方法。(对我来说不同!) URL:这里

这行让我感到困惑,因为一个类是作为参数传递的。好吧,在我在这里问之前,我想尝试一下并理解一下。这是我的代码:

在下一节课中,我使用了一种方法parameterObject作为参数传递(在 bjueJ 环境中)

当我调用该方法时,testFunction(...)它要求输入参数值并输入"arpan",19 and 20. 错误:预期..然后我尝试使用nullobjectParameter然后JVM抛出nullPointException错误..应该发生什么以及我缺乏什么理解?请帮忙。