问题标签 [member-hiding]

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 回答
1778 浏览

c# - 显式实现属性

我想要实现的很简单,我有一个 Interface IDatasource,它有一个名为DatasourceSettings

实现类看起来像这样

正如您可能看到的,该属性首先是显式实现的,它应该返回DatasourceSettings类本身的属性

等等,这就是我想要实现的目标

我得到的错误:

那么这里有什么问题呢?

0 投票
2 回答
81 浏览

java - 实例方法覆盖与字段隐藏

下面是代码,

在哪里,

它是运行时类,在实例方法访问的情况下很重要。

它是对象的视图,在字段访问的情况下很重要。

强制转换不会改变对象的类类型。我的意思((T1)this) instanceof T3true,如果this指向对象类型T3

那么,字段访问遵循的规则背后的基本原理是什么?规则例如方法对我来说很有意义。

注意:对我来说,除非有正当理由,否则记住这些规则是一种开销。

0 投票
3 回答
101 浏览

java - 为什么两种情况下的输出不同?

为什么即使变量已被覆盖,在以下情况下输出也会不同?

0 投票
4 回答
853 浏览

c++ - C++:当非重写调用重写方法时会发生什么?

被调用的重写方法的版本取决于您是否关心“通过”基类或“通过”派生类调用函数。但是,我发现如果我调用了一个非重写的方法,并且重写的方法调用了一些重写的函数,那么基类版本仍然被调用,即使我通过指向派生类的指针访问实例。有人可以解释为什么会这样吗?

代码:

0 投票
1 回答
111 浏览

c# - C#隐藏xml反序列化指向的模型中的字段

我有一个控制器类,它有另一个类的私有字段,它是一个模型,模型从 xml 反序列化中获取数据。由于这个反序列化过程,我必须创建公共的、无参数的构造函数和一些公共字段助手,它们只是将数据格式处理为另一种类型。这个处理非常简单,我不想使用它的接口重写和 XmlSerialization 类。
我想要实现的是只能从模型继承的接口访问模型中的字段,但模型必须具有公共字段 - 如何隐藏其中一些?他们在同一个项目中。(整个应用程序是如此之小,以至于将其分成更小的部分并不总是有意义的)。

有一个例子:

0 投票
0 回答
80 浏览

java - (字段隐藏)什么时候同时使用子类字段和隐藏的超类字段才有意义?

在 Java 中(与大多数 OO 语言一样),您可以有两个类,一个扩展另一个。您可以在两个类中拥有同名的实例字段,其中子类的实例字段隐藏了超类的实例字段。下面写了一个例子。

这意味着当对象被创建时,它同时具有它的 B 实例字段 i 和它的 A 实例字段 i。有人可能会认为您永远不会想要这个,并且当您在概念上在 B 类中创建一个新的“i”时,它的意思是“与该对象相关的唯一一个 i”。什么时候不是这种情况?举一个我们想要保留两个实例变量并修改它们的类的例子。

0 投票
0 回答
814 浏览

java - 配置与父类同名的子类字段的 Spring 属性

假设我有以下课程:

然后是以下 XML 配置:

以上将在调用 doSomething() motion.grove() 时给出 NullPointerException。

根据我从一些研究中了解到的情况,这与 Java 无法覆盖字段有关。以上(如果我的理解有误,请纠正我)实际上是指两个(?)不同的领域。

为什么上面的代码在使用 super 关键字调用 move() 时会起作用?这是否意味着尽管在 bean 定义类属性中明确定义了类类型,但 Spring 会将创建的 QuadripedalMovement 类分配给父字段而不是子字段?

如何配置 spring 以将其分配给(哺乳动物)子类的字段,以便我可以通过 Gorilla 的实例引用它?我无法修改 Animal 和 Gorilla 的 Java 代码。我只能修改 Mammal 类。我的临时解决方案是让 Mammal 实现 InitializingBean 并在那里设置移动值。

但我最近才开始学习 Spring(和 Java),所以我不知道这是否正确(或良好做法)。任何帮助,将不胜感激。

注意:以上代码与我目前正在学习的代码结构相同。我无法提供原件。使用的spring版本是2.5.6

0 投票
1 回答
5647 浏览

c++ - 隐藏重载的虚函数

考虑以下结构层次结构:

编译这个(使用clang,或g++使用-Woverloaded-virtual)会给我一个警告:

但是,如果我更改I12为以下内容,它在 下编译得很好clang,同时g++ -Woverloaded-virtual仍然给出警告:

using I2::doit和 和有什么不一样void doit(int) override = 0?天真地,我认为前者足以通知编译器我知道有两个版本的doit.

0 投票
1 回答
85 浏览

c# - 将属性隐藏在基类中会导致重大变化吗?

我有一个带有 ArrayList 和一个索引属性的基类“A”(一个集合),该属性在 ArrayList 中返回该索引。我还有一个带有泛型类型 T 的派生类“B”,它充当 T 的集合。最后,有类“C”-“F”派生出类 B,每个类都有不同的 T。

代码如下所示:

有使用这些类的第 3 方 .dll,所以我想知道是否可以在不破坏这些程序集的情况下进行更改。我想向 B 添加一个索引属性,它将隐藏 A 中的索引属性。

现在其他 .dll 可能具有如下所示的代码:

之前使用 'as' 进行强制转换的代码仍将使用新的 index 属性进行编译,但它也允许将代码简化为:

我想知道将索引属性添加到 B 是否会使用我的程序集破坏第 3 方 .dll。

我也非常感谢解释为什么或为什么不是或不是重大变化。

0 投票
1 回答
341 浏览

swift - 在扩展中重新声明成员*有时*会隐藏原始成员。为什么?

偶然地,我发现你可以在编译器不抱怨的情况下做到这一点:

更奇怪的是,这实际上计算为 1000:

  • 扩展似乎隐藏了原始成员。

所以我尝试用我自己的班级来做到这一点:

  • 并且它无法编译:“'a' 的重新声明无效”。

我观察到这不会影响通过协议对原始成员的使用,这是隐藏的预期行为:

你能解释一下为什么会出现子弹头现象吗?