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

c# - 方法隐藏如何在 C# 中工作?

为什么会打印以下程序

(正如它应该)

但是如果我们像这样删除 B 类中的关键字“public”:

它开始打印

?

0 投票
4 回答
1128 浏览

c# - 方法隐藏如何在 C# 中工作?(第二部分)

以下程序打印

(正如它应该)

但是,如果我在 B 类中将关键字“new”更改为“override”,如下所示:

突然程序开始打印:

为什么?

0 投票
5 回答
1144 浏览

c# - 继承真的隐藏方法吗?

我收到以下编译器警告:

对于这个(非常简化的)代码:

请注意,我不明白为什么 GetDisplayName() 函数没有收到警告。我显然忽略了一些东西。

我在 Stack Overflow 上搜索了一下,并用谷歌搜索了这个错误,它似乎适用于类继承,而不是接口。我真的很困惑为什么会为接口触发(将其方法定义为虚拟)。

提前感谢您的洞察力。

0 投票
9 回答
2282 浏览

c# - C# and method hiding

Per MSDN, the "new" keyword when used for method hiding only suppresses a warning.

http://msdn.microsoft.com/en-us/library/435f1dw2.aspx

Do I really need this "new" keyword to perform method hiding? If I have a child class that has the same method name but doesn't explicitly state that it is overriding, isn't that the same thing essentially, I just get a warning? Please tell me if my understanding is correct. Thanks

0 投票
2 回答
1779 浏览

c# - 如何在泛型约束类中使用方法隐藏(新)

我有一个容器类,它有一个泛型参数,它受限于某个基类。提供给泛型的类型是基类约束的子类。子类使用方法隐藏(新)来更改基类中方法的行为(不,我不能将其设为虚拟,因为它不是我的代码)。我的问题是没有调用“新”方法,编译器似乎认为提供的类型是基类,而不是子类,就好像我已经将它向上转换到基类一样。

显然,我在这里误解了一些基本的东西。我认为泛型where T: xxx是一种约束,而不是向上转型的类型。

这个示例代码基本上演示了我在说什么。

编辑:

我想我的困惑来自于可以做到这一点

即使我理解编译器会将其视为具有的接口,我也希望T如此。我假设即使接口是在编译时设置的,也会在运行时进行输入。该声明在这里似乎具有误导性,因为它确实在做TTAnotherTypeTTT foo

一旦我明白它并没有真正声明foo为 type T,就可以理解为什么new方法隐藏不起作用了。

这就是我要说的。

0 投票
3 回答
56144 浏览

c# - 覆盖vs方法隐藏

我对覆盖与隐藏 C# 中的方法有点困惑。每个人的实际用途也将受到赞赏,以及何时使用每个人的解释。

我对覆盖感到困惑 - 为什么我们要覆盖?到目前为止我所学到的是,通过覆盖我们可以为派生类的方法提供所需的实现,而无需更改签名。

如果我不覆盖超类的方法并且我对子类中的方法进行更改,那会更改超类的方法吗?

我也对以下内容感到困惑——这说明了什么?

0 投票
2 回答
1745 浏览

java - getDeclaredMethods() 和隐藏的超类静态方法

根据http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Class.html#getDeclaredMethods%28%29, Cl​​ass.getDeclaredMethods() 应该只包括方法“由类声明”。但是,使用下面的测试代码,我得到了一些非常令人惊讶的结果:

一些对我来说看起来很奇怪/令人惊讶的事情:

  • 编译器抱怨 B.m3() 的返回类型与 A.m3() 不兼容。这是由 JSL 8.4.8.3(第 225 页 v3 langspec-3.0.pdf)规定的。但我很好奇,为什么这个限制需要应用于静态方法。我的理解是静态方法可以隐藏不被覆盖,并且引用是在编译时解析的,那么这个限制背后的原因是什么?

  • 输出中包含两个 m2() 方法。这似乎与 getDeclaredMethods() 仅返回“由类声明的”方法和“排除继承的方法”的说法相矛盾。我不认为 A.m2() 是“由”B“声明的”。

  • 输出中包含一个 m1()。继上一点之后,如果让 getDeclaredMethods() 返回两个 m2() 有意义,那么为什么它不返回两个 m1() 呢?它们毕竟是两种不同的方法,一种被另一种隐藏。我没有看到 m1() 和 m2() 的情况之间有任何根本区别,除了在 m1() 的情况下返回类型相同,但我理解的返回类型不是方法签名的一部分?

提前致谢!

0 投票
4 回答
1230 浏览

c# - C# 方法隐藏

我有一个基类,它具有将文件移动到适当文件夹的方法。有许多不同的文件具有许多不同的命名方案。每个文件的移动和文件夹创建都是相同的,但是由于文件名不同,确定日期是不同的。我正在尝试这样做:

问题是此代码导致在“MoveFileToProcessedFolder”方法中调用“GetMonth”的基类版本。我认为使用“new”关键字,这将隐藏原始实现并允许派生实现接管。这不是正在发生的事情。显然我不理解 new 在这种情况下的目的,那里的任何人都可以帮助我理解这一点吗?

谢谢。

0 投票
3 回答
423 浏览

c++ - 在 C++ 中清除函数隐藏编译器警告

我在编译器中收到“隐藏”警告,因为从其父类继承的类具有相同的名称但参数不同。

添加一个仅发出警告以说明此函数不执行任何操作(在基类中也是如此,但没有警告)的函数,该函数将基类函数的参数和名称匹配到派生类会清除此编译器警告。这对派生类有什么潜在的连锁反应?

编辑:假设我不希望他们能够使用基类函数。(不要问)。