问题标签 [abstract-class]

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 投票
21 回答
165520 浏览

objective-c - 在 Objective-C 中创建一个抽象类

我最初是一名 Java 程序员,现在使用 Objective-C。我想创建一个抽象类,但这在 Objective-C 中似乎是不可能的。这可能吗?

如果不是,我可以在 Objective-C 中获得多接近抽象类?

0 投票
3 回答
117 浏览

oop - 哪个设计选项更适合用于编写框架?

我正在编写一个框架(在 Java 中,但问题是通用的),我将在其中提供一组接口供客户端实现。框架中的功能将依赖于如何构造实现类,也就是说,它们依赖于这些实现来提供其他接口实例。

例如我可能有:

如何确保 IMyStuff 和 IHelper 的这些实例可用?

一种方法是在接口中创建“getter”方法,并在我的框架中煞费苦心地检查返回的空对象。

另一种选择是创建实现工厂的抽象类,该工厂调用(使用策略模式)要实现的接口方法。但这违背了我首先拥有界面的事实。然后客户端应该使用抽象类。但是他们可以通过使用接口而不是抽象类来规避这一点。因此我不应该提供接口而只提供抽象类......

那么,您对此有何想法,对此采取务实的方法是什么?

0 投票
8 回答
11845 浏览

c# - 与抽象类相比,使用部分类有什么好处?

我一直在阅读 Programming Microsoft® Visual C#® 2008: The Language 以更好地理解 C# 以及可以用它做什么。我遇到了我已经从 ASP.Net 的 Page 类中遇到的部分类。

对我来说,您似乎可以使用抽象类和覆盖类来完成部分类的工作。显然,一个团队将通过抽象方法控制接口,但无论如何你都会相互依赖。如果目标是协作,那么源代码控制和其他工具就不能解决这个问题。

我只是错过了部分课程的重点。也有人可以提供真实世界的使用。

0 投票
4 回答
478 浏览

c# - 基类中的反射是一个糟糕的设计理念吗?

一般来说,基类中的反射可以达到一些好的和有用的目的,但是我在这里有一个案例,我处于困境和困境之间......使用反射,或者在它们真正应该公开的时候公开工厂类从语义上讲是私有的(即,不只是任何人都应该能够使用它们)。我想这里有一些代码:

现在,这段代码对我有用,但它是一个可怕的组合和/或一个非常糟糕的主意吗?另一种选择是将 Factory 的类型作为类型参数传递,但是由于可见性限制,Factory 类必须是公共的,这意味着任何人都可以调用它来创建不应该的实例。

0 投票
3 回答
4325 浏览

vb.net - 受保护的构造函数和 MustInherit/ 抽象类

具有受保护构造函数的类和标记为的类有什么区别MustInherit?(我在 VB.Net 中编程,但它可能同样适用于 c#)。

我问的原因是因为我有一个抽象类,我想将构造函数转换为共享/静态方法。(添加一些约束)。

我不能这样做,因为无法在共享函数中创建实例。

我正在考虑删除MustInherit关键字。这会有什么不同吗?

谢谢。

预计到达时间:

我想我已经回答了我的问题,如果我删除 MustInherit 关键字,我就不能再包含 MustOverrides,这非常有用。

考虑到这一点,有什么办法可以解决我的问题吗?

ETA2:

澄清一下,除非我删除 MustInherit 关键字,否则我不能执行以下操作?

0 投票
12 回答
207184 浏览

java - 使用 Mockito 测试抽象类

我想测试一个抽象类。当然,我可以手动编写一个从类继承的模拟。

我可以使用模拟框架(我正在使用 Mockito)而不是手工制作我的模拟来做到这一点吗?如何?

0 投票
1 回答
284 浏览

c# - 关于避免此抽象上的代码重复的任何提示?

所以我正在使用 SQL Compact Edition 之上的实体框架构建一个应用程序。我不喜欢使用实体作为我的业务对象的想法,所以我一直在构建一个层(我称它为 ObjectModel 层,可能不是最好的术语),它将采用我的普通对象,使用它们填充和保存实体。反之亦然 - 获取实体,填充 POCO 以用作业务对象


假设我有一个名为 Customer 的 POCO 对象,

我想使用我的 ObjectModel 层填充它。我目前这样做...

OM_Customer 类继承自 ObjectModelBase,如下所示。

这里的问题在于GetById方法。Save 方法可以被子类很好地使用,因为所有实体框架对象上下文都有 AddObject() 方法。

但是,我希望有一个通用的 getById 方法,因为我所有的实体都有一个名为 id 的属性(在数据库中也是主键)。问题是这里的 linq ......

特定于db.CustomerSet。我希望这个抽象类为我的所有实体提供通用的 CRUD/Paging/'Collection Retrieval',但是没有重复的击键,但是,这个简单的 GetById 方法促使我寻求帮助。

目前的想法:

  • 让我通过 Id 使用 Entity SQL 来更好地控制构建查询字符串。
  • 废弃实体框架和 linq,因为它可能太耗时而无法完全抽象。

将不胜感激任何关于 SO 社区将如何解决上述问题的建议。

0 投票
2 回答
7568 浏览

generics - 泛型类型与抽象类/接口

假设我们正在.NET 中创建一个通用控件。例如一棵树。我不明白为什么人们使用这个泛型类型定义

在面向对象编程中,我可以使用抽象类或接口:

所以唯一要做的是,它们的类型必须从该基类派生或实现接口。这是否意味着,泛型类型更方便,因为你我不必实现或继承任何东西?

0 投票
3 回答
869 浏览

c# - 需要帮助理解实现接口的抽象类

考虑以下示例。我有一个接口 MyInterface,然后是两个抽象类 MyAbstractClass1 和 MyAbstractClass2。MyAbstractClass1 实现 MyInterface,但 MyAbstractClass2 没有。

现在我有三个具体的类。

  1. MyConcreteClass1 派生自 MyAbstractClass1 但不实现 MyInterface。
  2. MyConcreteClass2 派生自 MyAbstractClass2,但确实实现了 MyInterface。
  3. MyConcreteClass3 派生自 MyAbstractClass1,并实现了 MyInterface。

ConcreteClass1 是否也隐式实现 MyInterface,因为它派生自 MyAbstractClass1?假设 MyAbstractClass1 隐式实现 MyInteface 的方法,那么 ConcreteClass1 不应该强制转换为 MyInterface 来访问 MyInteface 方法吗?

MyAbstractClass1 可以将 MyInterface 的方法隐式实现为抽象方法,但不能将 MyInterface 的方法显式实现为抽象方法。为什么是这样?

MyConcreteClass3 是否过度,因为它正在实现一个已经由其基类实现的接口?即使您知道从 MyAbstractClass1 派生的所有类也应该实现 MyInterface,您是否有理由这样做。

这是一个类图

替代文字 http://files.getdropbox.com/u/113068/abstractclassesandinterfaces.png

这是代码:

0 投票
4 回答
863 浏览

actionscript-3 - 当一个 SWF 动态加载另一个 SWF 文件时,如何使两个 SWF 文件中使用的 Action Script 3 类解析为同一个类?

背景

我正在使用纯 Action Script 3 开发一个高度模块化的应用程序(我们使用 Flex 4 SDK 来自动化我们的构建,但我们所有的代码都必须能够直接在 Flash CS4 Professional 中编译)。

我们有一个“framework.swc”文件,其中包含在所有模块之间共享的接口定义,我们有一个加载其他模块的“mainmodule.swf”,然后我们有其他模块的各种 .swf 文件。我们使用 Loader 类,结合 ApplicationDomain::getDefinition() 动态加载类[我们使用“new LoaderContext(false,ApplicationDomain.currentDomain)”]。

问题

我们所有的模块都实现了在“framework.swc”中定义的“AbstractModule”接口。但是,当我实例化一个动态加载的模块时,(module is AbstractModule) 返回 false。更重要的是,如果我调用 module.someMethod(someobject),其中 someobject 实现了“framework.swc”中定义的接口,并且模块的方法需要“framework.swc”中定义的相同接口的对象,我会收到运行时错误“TypeError:错误 #1034:类型强制失败:无法将 _ 转换为 _。”

似乎“mainmodule.swf”和“loadedmodule.swf”(我一直在加载以进行测试的模块)在内部对“framework.swc”中的共享接口使用单独的定义

问题

如何使“mainmodule.swf”和“loadedmodule.swf”将它们的公共接口解析为共享定义,以便类转换和类比较正确成功?