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

c# - C# 中的抽象显式接口实现

我有这个 C# 代码:

照原样,我得到:

“类型”未实现接口成员“System.Collections.IEnumerable.GetEnumerator()”。

删除评论,我得到:

修饰符“抽象”对此项目无效

如何制作明确的实现抽象

0 投票
8 回答
12687 浏览

c# - 抽象类、构造函数和 Co

好吧,我正在尝试重用一部分 C# 代码。这是一个带有 UDP 服务器的抽象类,可以在这里看到:

http://clutch-inc.com/blog/?p=4

我创建了一个这样的派生类:

在我的应用程序中,我创建了一个派生类的实例,如下所示:

但是我有错误,我真的不明白为什么。请帮忙。

  1. “TheProject.TheServer”不包含采用“1”参数的构造函数
  2. 'TheProject.UDPServer.Start()' 由于其保护级别而无法访问
  3. “TheProject.UDPServer”不包含采用“0”参数的构造函数
0 投票
6 回答
7801 浏览

java - Why do we need constructors and private members in the abstract class?

Why do we need constructors and private members in the abstract class? It is not like we are ever going to create an instance of that class.

0 投票
4 回答
787 浏览

java - 是否可以在覆盖的方法中有专门的参数?

假设我有一个名为“shape”的抽象父类,并且有多个子类(三角形、正方形、圆形......)。我想在父“shape”类中定义一个所有子类都必须实现的抽象方法,我们称之为“draw”。所以所有形状子类都必须提供“draw()”方法。但是,draw 方法采用“Stencil”类型的参数,并且,并非每个形状子类都可以使用任何模板......

所以有一个抽象的“形状”类、多个形状子类和多个模板。我需要一个在 shape 类中定义的 draw 方法。正方形可能使用 Stencil1,圆形可能使用 Stencil2。

我猜泛型可以解决问题,但我不确定。每个形状子类都需要使用特定的模板定义绘图方法,因为这些类也被其他类使用,编译器应该强制所有程序员使用该类支持的模板调用绘图方法。我们不能定义像“public abstract void draw(Stencil s)”这样的抽象方法,因为程序员可以将任何模板传递给 square 类,而 square 类只支持“Stencil1”

有任何想法吗?

更新1: 应该补充一点,形状类不关心子类使用哪个模板,但由于其他类也使用子类,所以定义draw方法很重要,以便编译器只接受支持的模板.

0 投票
2 回答
8387 浏览

c# - C# syntax for declaring a variable of an abstract generic type

I have a class defined as follows;

In the concrete sub-class I define the types as so;

At the next tier up, I have business objects which hold the Repository object as a private variable.

This was fine;

However, I then refactored this out into a parent class for all the business objects - this parent class holds the repository/ implements Dispose pattern to dispose of repository etc.

My problem is that I just can't get the syntax right for the declaration of the variable.

The closest I have come is;

but this gives the compile error:

"Error 1 'System.Data.Linq.DataContext' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'TDataContext' in the generic type or method '....Repository'..."

I've tried various other things but hit other problems.

In the business layer object inheriting this abstract class I am creating and using the _repository variable with a cast;

  • and I think this will be fine, assuming I can get this declaration right in the parent.

If I can't get this to work I have to declare the _repository in each business object, with the full/ concrete type details, and implement the dispose pattern in each one to clear up. Not the end of the world, but I'd like to not have to.

0 投票
10 回答
25600 浏览

c++ - Pimpl 成语 vs 纯虚拟类接口

我想知道是什么让程序员选择 Pimpl 习惯用法或纯虚拟类和继承。

我知道 pimpl idiom 为每个公共方法和对象创建开销都提供了一个明确的额外间接。

另一方面,纯虚拟类带有用于继承实现的隐式间接(vtable),我知道没有对象创建开销。
编辑:但是如果你从外部创建对象,你需要一个工厂

是什么让纯虚拟类比 pimpl 成语更不受欢迎?

0 投票
2 回答
15644 浏览

python - python中的抽象类+mixin+多重继承

所以,我认为代码可能比我用语言更好地解释了我想要做的事情,所以这里是:

结果:

我试图让 mixin 类满足抽象/接口类的要求。我错过了什么?

0 投票
3 回答
864 浏览

c++ - 在 C++ 中使用非虚拟公共接口和作用域锁避免死锁

我遇到了一个对我来说似乎很困扰的问题。似乎我发现了一种很容易解决的情况,但是如果 a) 我在编程时注意力不集中,或者 b) 其他人开始实现我的接口并且不知道如何处理,这可能会导致问题这个情况。

这是我的基本设置:

我有一个抽象类,用作几种数据类型的通用接口。我采用了非虚拟公共接口范例(Sutter,2001)以及范围锁定来提供一些线程安全性。一个示例接口类看起来像这样(我省略了有关范围锁定和互斥锁实现的细节,因为我认为它们不相关):

然后由用户来实现 aImp 和 bImp,这就是问题所在。如果 aImp 执行一些使用 bImp 的操作,那么执行此操作非常容易(并且在某种意义上几乎是合乎逻辑的):

僵局。当然,解决这个问题的简单方法是始终调用受保护的虚函数而不是它们的公共变体(在上面的代码片段中将 B( ) 替换为 bImp( ))。但是,如果我犯了一个错误,或者更糟的是让别人上吊自己,似乎仍然很容易上吊。

有没有人有办法阻止抽象类的实现者在编译时调用这些公共函数,或者帮助避免死锁解决方案?

只是为了踢,一些互斥锁允许操作,这将避免死锁问题。例如,如果我使用 Windows 函数 EnterCriticalSection 和 LeaveCriticalSection 来实现这一点,则没有问题。但我宁愿避免特定于平台的功能。我目前在我的作用域锁实现中使用 boost::mutex 和 boost::shared_mutex ,据我所知,它并没有试图避免死锁(我认为我几乎更喜欢)。

0 投票
2 回答
963 浏览

visual-studio-2008 - VS2008中如何使用集成单元测试测试抽象类

我找不到任何关于它是否可以做到这一点的信息。

我在抽象类中有几个受保护的方法,想测试它们。

我不想从类继承并测试它的实现(除了技术上不是严格的单元测试,VS2008 也不会让你测试继承的方法)。

我想在集成单元测试的上下文中解决这个问题......我知道例如 nUnit 将允许你这样做。

有什么想法吗?建议?

0 投票
4 回答
19932 浏览

java - 抽象类是否应该有一个 serialVersionUID

在java中,如果一个类实现了Serializable但是是抽象的,它应该有一个长声明的serialVersionUID,还是子类只需要这个?

在这种情况下,确实是所有子类都处理序列化,因为类型的目的是在 RMI 调用中使用。