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

c# - 为什么 C# 中的基类允许实现接口契约而不继承它?

我偶然发现了 C# 的这个“特性”——实现接口方法的基类不必从它派生

例子:

发生的事情是Derived神奇地选择了一个公共方法Base.Func,并决定它会实现IContract.Func

这种魔法背后的原因是什么?

恕我直言:这种“准实现”功能非常不直观,并且使代码检查更加困难。你怎么看?

0 投票
5 回答
3089 浏览

c# - 接口和基类混合,正确的实现方式

我有一些用户控件,我想为其指定属性和方法。

它们继承自基类,因为它们都具有“Foo”和“Bar”等属性,而我使用基类的原因是我不必在每个派生类中手动实现所有这些属性。

但是,我想要一个仅在派生类中而不是在基类中的方法,因为基类不知道如何“执行”该方法,因此我正在考虑为此使用接口。如果我把它放在基类中,我必须定义一些主体来返回一个值(这将是无效的),并始终确保覆盖方法没有调用基类。方法

使用基类和接口来公开方法是正确的方法吗?这似乎很迂回,但我认为这样做的每一种方式似乎都是错误的......

如果问题不清楚,请告诉我,这可能是一个愚蠢的问题,但我想做到这一点。

编辑:感谢所有提出优秀抽象建议的人,但这打破了设计师。如果摘要不是一个可选择的选项,你会怎么做?

0 投票
7 回答
5509 浏览

c++ - C++ 模板基类的编译器警告

我收到编译器警告,在这种情况下我不明白。当我从以下代码编译“Child.cpp”时。(不要奇怪:我将我的类声明剥离到最低限度,所以内容没有多大意义,但你会更快地看到问题)。我收到了最高警告级别的Visual Studio 2003Visual Studio 2008警告。


编码

抽象类.h:

孩子.h:

孩子.cpp:


警告

“Child”类派生自“AbstractClass”。在“AbstractClass”中有公共方法“AbstractClass::Cancel()”。如果我在类主体之外定义方法(如您看到的代码中),我会收到编译器警告...

AbstractClass.h(7):警告 C4505:'AbstractClass::Cancel':未引用的本地函数已使用 [T=int] 删除

...当我编译“Child.cpp”时。这个我不明白,因为这是一个公共函数,编译器不知道我以后有没有引用这个方法。最后,我引用了这个方法,因为我在 main.cpp 中调用它,尽管有这个编译器警告,但如果我编译并链接所有文件并执行程序,这个方法仍然有效:

如果我确实将 Cancel() 函数定义为内联(您将其视为 AbstractClass.h 中的注释代码),那么我不会收到编译器警告。当然我的程序可以工作,但我想了解这个警告还是这只是一个编译器错误?

此外,如果不将 AbsctractClass 实现为模板类(在这种情况下仅用于测试目的),我也不会收到编译器警告...?


如果我创建一个非虚拟函数,我不会收到该非虚拟函数的编译警告,但到目前为止所有答案都不包含虚拟内容。尝试这个:

知道的答案对我有帮助,但我认为这个问题没有得到完全回答。

0 投票
1 回答
206 浏览

wcf - 使用 L2S、WCF 和基类的多层应用程序

有一天,我决定使用 L2S 和 WCF 构建这个漂亮的多层应用程序。简化模型为:DataBase->L2S->Wrapper(DTO)->Client Application。客户端和数据库之间的通信是通过使用包含实体对象作为其属性的数据传输对象来实现的。

很简单,不是吗?这就是问题所在。每个映射类都包含 ID 属性本身,所以我决定像这样覆盖它

除法包装器也非常简单:

只要我在映射类和它的 BaseObject 类中保持 ID 值相同,它就可以很好地工作(我知道这不是很好的方法,但仍然如此)但是后来发生了这种情况:

尝试枚举内存中查询时发生以下异常:类成员 BaseObject.ID 未映射。尽管我在说明类型并覆盖 ID 属性 L2S 无法正常工作。有什么建议么?

0 投票
5 回答
6297 浏览

c++ - 自动调用 C++ 基类方法

我正在尝试实现命令设计模式,但我遇到了一个概念问题。假设您有一个基类和一些子类,如下例所示:

问题是,每次()在 SomeCommand 实例上调用运算符时,我想通过调用 Command 的 register 方法将 *this 添加到堆栈(主要用于撤消目的)。我想避免从 SomeCommand::operator()() 调用“注册”,而是自动调用它(以某种方式 ;-))

我知道当你构造一个像 SomeCommand 这样的子类时,会自动调用基类构造函数,所以我可以在那里添加一个“注册”调用。在调用 operator()() 之前我不想调用 register 的东西。

我怎样才能做到这一点?我想我的设计有些缺陷,但我真的不知道如何完成这项工作。

0 投票
3 回答
1227 浏览

c++ - 错误的私有基类无法访问?

使用 g++ 4.2.1 编译此代码:

我得到:

但是,如果我将wrap_rep类更改为使用ST

它编译得很好。或者,如果我将原始代码更改为:

它也编译得很好。对我来说,原始代码看起来很好。这是一个 g++ 错误吗?如果不是,那为什么使用模板有效?而且,对于另一种情况,为什么有::S必要?

0 投票
1 回答
95 浏览

oop - 我应该在派生类中有一个构造函数吗?

我的问题是这样的。我有一个 XMLUtility 类

和一个

和其他基本功能,如 addSetting、removeSetting、checkSettingExists 等。此类为非常基本的 xml 设置文件提供功能。

所以现在我需要更高级的设置处理。所以我创建了另一个类并从 XMLUtility 类派生它。

所以我最初的想法是我不需要这个类的构造函数,因为它将调用基类构造函数。但是我错了。

我的问题是上面的代码是否正确?我是否也需要在此构造函数中编写整个检查过程,还是由基类的构造函数处理?只是一个空的代码块是正确的吗?

0 投票
4 回答
4764 浏览

c# - 您如何处理可以是多种类型的变量?

我经常使用以下方法将对象链接到它们的父对象:

有时我的对象可以是不同对象类型的子对象,我也是:

有没有更好的办法?如何使用可以是不同类型实例的变量?

编辑:当然,如果视频和音频从同一个基类(例如媒体)继承,我可以这样做:

但是如果父母不是从同一个基类继承呢?

0 投票
5 回答
3893 浏览

c++ - C ++模板鸭子类型与纯虚拟基类继承

在模板鸭子类型和纯虚拟基类继承之间进行选择的准则是什么?例子:

0 投票
9 回答
48015 浏览

python - 将基类转换为派生类python(或扩展类的更多pythonic方式)

我需要扩展 Networkx python 包并向Graph类添加一些方法以满足我的特殊需要

我考虑这样做的方式是简单地派生一个新类 sayNewGraph并添加所需的方法。

然而,networkx 中还有其他几个函数可以创建和返回Graph对象(例如生成随机图)。我现在需要将这些Graph对象转换为NewGraph对象,以便我可以使用我的新方法。

这样做的最佳方法是什么?还是我应该以完全不同的方式解决问题?