问题标签 [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.
c# - C# - 关键字使用 virtual+override 与 new
在基类型“”中声明一个方法,virtual
然后在子类型中使用“”关键字覆盖它,而不是在子类型中声明匹配方法时override
简单地使用“ ”关键字有什么区别?new
c# - 方法隐藏如何在 C# 中工作?
为什么会打印以下程序
(正如它应该)
但是如果我们像这样删除 B 类中的关键字“public”:
它开始打印
?
c# - 方法隐藏如何在 C# 中工作?(第二部分)
以下程序打印
(正如它应该)
但是,如果我在 B 类中将关键字“new”更改为“override”,如下所示:
突然程序开始打印:
为什么?
c# - 继承真的隐藏方法吗?
我收到以下编译器警告:
对于这个(非常简化的)代码:
请注意,我不明白为什么 GetDisplayName() 函数没有收到警告。我显然忽略了一些东西。
我在 Stack Overflow 上搜索了一下,并用谷歌搜索了这个错误,它似乎适用于类继承,而不是接口。我真的很困惑为什么会为接口触发(将其方法定义为虚拟)。
提前感谢您的洞察力。
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
c# - 如何在泛型约束类中使用方法隐藏(新)
我有一个容器类,它有一个泛型参数,它受限于某个基类。提供给泛型的类型是基类约束的子类。子类使用方法隐藏(新)来更改基类中方法的行为(不,我不能将其设为虚拟,因为它不是我的代码)。我的问题是没有调用“新”方法,编译器似乎认为提供的类型是基类,而不是子类,就好像我已经将它向上转换到基类一样。
显然,我在这里误解了一些基本的东西。我认为泛型where T: xxx
是一种约束,而不是向上转型的类型。
这个示例代码基本上演示了我在说什么。
编辑:
我想我的困惑来自于可以做到这一点
即使我理解编译器会将其视为具有的接口,我也希望T
如此。我假设即使接口是在编译时设置的,也会在运行时进行输入。该声明在这里似乎具有误导性,因为它确实在做T
T
AnotherType
T
T
T foo
一旦我明白它并没有真正声明foo
为 type T
,就可以理解为什么new
方法隐藏不起作用了。
这就是我要说的。
c# - 覆盖vs方法隐藏
我对覆盖与隐藏 C# 中的方法有点困惑。每个人的实际用途也将受到赞赏,以及何时使用每个人的解释。
我对覆盖感到困惑 - 为什么我们要覆盖?到目前为止我所学到的是,通过覆盖我们可以为派生类的方法提供所需的实现,而无需更改签名。
如果我不覆盖超类的方法并且我对子类中的方法进行更改,那会更改超类的方法吗?
我也对以下内容感到困惑——这说明了什么?
java - getDeclaredMethods() 和隐藏的超类静态方法
根据http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Class.html#getDeclaredMethods%28%29, Class.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() 的情况下返回类型相同,但我理解的返回类型不是方法签名的一部分?
提前致谢!
c# - C# 方法隐藏
我有一个基类,它具有将文件移动到适当文件夹的方法。有许多不同的文件具有许多不同的命名方案。每个文件的移动和文件夹创建都是相同的,但是由于文件名不同,确定日期是不同的。我正在尝试这样做:
问题是此代码导致在“MoveFileToProcessedFolder”方法中调用“GetMonth”的基类版本。我认为使用“new”关键字,这将隐藏原始实现并允许派生实现接管。这不是正在发生的事情。显然我不理解 new 在这种情况下的目的,那里的任何人都可以帮助我理解这一点吗?
谢谢。
c++ - 在 C++ 中清除函数隐藏编译器警告
我在编译器中收到“隐藏”警告,因为从其父类继承的类具有相同的名称但参数不同。
添加一个仅发出警告以说明此函数不执行任何操作(在基类中也是如此,但没有警告)的函数,该函数将基类函数的参数和名称匹配到派生类会清除此编译器警告。这对派生类有什么潜在的连锁反应?
编辑:假设我不希望他们能够使用基类函数。(不要问)。