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

c# - C# - 关键字使用 virtual+override 与 new

在基类型“”中声明一个方法,virtual然后在子类型中使用“”关键字覆盖它,而不是在子类型中声明匹配方法时override简单地使用“ ”关键字有什么区别?new

0 投票
3 回答
1301 浏览

c# - C# 与成员一起隐藏

在下面的例子中,会发生什么?

我确定您会在控制台上看到“2”,但我正在阅读(和看到)的内容与此相反......

为什么你会看到“3”而不是“2”?我认为派生类的成员“隐藏”了基类的相同成员......

0 投票
4 回答
10950 浏览

c# - C#从基类隐藏、覆盖和调用函数

我正在学习 C#,我遇到了以下问题。我有两个类:基类和派生类:

现在,没有virtualoverride关键字。当我编译这个时,我得到了我试图MyMethodMyBase课堂上隐藏的警告(这当然是预期的)。

我想要做的是从具有派生类实例的基类中调用该方法。我这样做:

当我没有virtual在方法中指定任何 , etc. 关键字时,它可以正常工作。我尝试将关键字组合起来,得到以下结果:

我希望这张表对你来说很清楚。我有两个问题

  1. 从基类()调用函数是否正确((MyBase)myDerived).MyMethod();?我知道base关键字,但只能从派生类内部调用它。这样对吗?
  2. 为什么在最后一种情况下(使用virtualoverride修饰符)调用的方法来自派生类?你能解释一下吗?
0 投票
2 回答
220 浏览

c# - 使用成员隐藏 (`new`) 获得更具体的返回类型

我正在考虑使用new重新定义子类中的成员以提供更具体的返回类型。问题是:这是个好主意,还是自找麻烦?

要解决的问题是当有几个“镜像”类层次结构时,每个层次结构层的类型都引用另一个层次结构的同一级别。很难解释,所以举个例子:

有代码只处理抽象的“级别”1(A1/B1等),其他级别也一样。如果每个“级别”都能看到尽可能具体的类型,那就太好了。目前,我在最顶层定义了类型,并在调用代码中一直向下转换。有时我使用另一个名称为某个“级别”添加另一个成员,这会导致更多的冗余成员。我想让它更干净。

(泛型在这里不是一个选项,因为B2不知道就不会有用B3(那里需要额外的接口)。如果有很多类型(例如,还有 C1/2/3、D1/2/3 ...)会有太多通用参数。从技术上讲,它会起作用,但它会变得非常复杂。)

此外,我将序列化其中的一些类 ( DataContractSerializer),并使用 NHibernate 将一些类映射到数据库。

有没有人已经做过这样的事情?值得推荐吗?有没有其他方法可以解决同类问题?

编辑:由于关于演员表和属性实现的讨论,我稍微更改了代码。这实际上不是这里的问题。我只是试着写尽可能少的代码来做一个简短的例子。

0 投票
1 回答
1431 浏览

c# - WPF:如何使基类的依赖属性只读_

我有一堂课 public class NavigableViewport3D : Viewport3D。该类应隐藏该Viewport3D.Camera属性,使其变为只读。这是我到目前为止所拥有的:

但我也希望始终返回与/NavigableViewport3D.CameraProperty相同的值...如果没有依赖属性,我会这样做:Viewport3D.CameraPropertybase.Camera

这是一种应该完成双向交换的丑陋方式:

我真的希望有更好的方法来实现这一点......有什么建议吗?

0 投票
3 回答
6389 浏览

java - eclipse警告“字段声明隐藏另一个字段或变量”的使用?

Eclipse 有一个名为“字段声明隐藏另一个字段或变量”的 java 编译器设置,可以设置为警告/错误。

在您看来,这个警告有多重要?

处理这个问题的好标准方法是什么?

发生这种情况的代码示例:

我见过重命名字段的解决方案,即“fCaption”,但这会导致可以生成的自动 getter/setter 具有奇怪的名称 ( getfCaption())。不是不可读,而是丑陋...

编辑:哦,是的,有可能重命名方法签名Test(String caption_)或类似的东西,但这最终会使 javadoc 看起来很奇怪。

0 投票
1 回答
258 浏览

c++ - C++ 赋值运算符解析

考虑以下代码:

然后当我们调用这个成员时:

将打印:

问题:为什么 B::foo 隐藏了 A::foo,而 B::operator= 没有?

0 投票
1 回答
521 浏览

java - 关于在 Java 中隐藏/隐藏成员变量的问题

我想了解隐藏在 Java 中的工作原理。所以让我们假设你有以下代码

如果我编译,我将获得 NullPointerException。我认为这将是 sc.toString(); 的输出。

我将此代码更改为

它得到了预期的输出......好的 setMember of B 覆盖了来自 A 的那个,所以我可以用这种方式解释这一点。我玩了一下并从 B 中删除了 setMember 以取回我的 NullPointerException。但是如果我将 A 的代码更改为,它会再次编译并给我输出

在我看来,实际上 SomeClass 成员有两个实例......但是如果有两个实例,那么阴影意味着什么?隐藏仅对第二种情况有用吗?

0 投票
2 回答
1170 浏览

java - 访问修饰符和隐藏 Java 字段

这是对以下问题的跟进:“java access modifiers and overriding”。然而,前者通常处理 Java 方法。为什么 Java 字段具有灵活性?我们可以在继承的类中通过尊重他们来缩小或扩大可见性,而不能使用“覆盖”或“隐藏”方法。

0 投票
4 回答
396 浏览

c# - C# 列表隐藏属性?

可能重复:
当 IsReadOnly 是接口成员时,List<T> 如何使 IsReadOnly 成为私有?

好吧,这让我发疯了。List<T>实现IList<T>。然而,

错误是:

“System.Collections.Generic.List”不包含“IsReadOnly”的定义,并且找不到接受“System.Collections.Generic.List”类型的第一个参数的扩展方法“IsReadOnly”(您是否缺少 using 指令还是汇编参考?)

怎么会这样?这不违反我们告诉所有人的关于不隐藏成员的规则吗?这里的实现细节是什么?