问题标签 [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# 类中隐藏来自 VB 类的方法
我正在从一段遗留代码中为一个名为 ImageEditor 的大型复杂类编写一组单元测试,其中图像处理和 GUI 功能没有严格划分。类中的一种方法 BaseImageChanged 似乎完全关注图像的显示方式,应该在我的单元测试中禁用以避免不必要的复杂性。测试项目为C#,原代码为VB;我的想法是为 C# 中的类创建一个装饰器,然后将方法隐藏在一个什么都不做的空方法后面。但是,当我尝试运行单元测试时,VB 代码一直引用旧的 BaseImageChanged 方法,就好像替换不存在一样。这就是我正在做的事情:
(VB类)
(C#类)
有没有办法实现这种互操作性,还是我必须找到另一种方法?
编辑:编译器错误原来是反射问题。此外,只要基类是 ImageEditor 的访问器而不是原始 ImageEditor 类,覆盖该方法就不起作用。(没有编译器错误,但基方法的行为没有被覆盖。)
java - JButton的Java子类覆盖setEnabled方法问题
我有一个名为 ImageButton 的自定义按钮类,它扩展了 JButton。在其中我有一个我想要调用的 setEnabled 方法,而不是 JButton 的 setEnabled 方法。
我的代码如下。在我的另一个类中,我创建了一个 ImageButton 的新实例,但是当我尝试使用 setEnabled 方法时,它直接转到 JButton 的 setEnabled 方法。甚至在我运行代码之前,我的 IDE 就告诉我从未使用过 ImageButton 的 setEnabled 方法。如果我将方法更改为“SetOn”,它工作正常。那么为什么我不能使用与超类相同的名称呢?我认为如果它是同名的,它应该隐藏超类方法?
c# - 如何正确隐藏基类属性
我从中派生了一个基类(黑盒;不能修改它)。在我的派生类中,我不再希望允许用户使用属性,而是现在可以使用公共函数。我不会详细说明原因(这无关紧要),但这是我试图隐藏的属性:
我试过这个,但没有奏效:
我也试过这个,但是编译器说我不允许将两个访问器都设为私有:
我该如何正确地做到这一点?请注意,我并不依赖于这是一个完整的安全解决方案,显然通过转换为基类他们仍然可以调用此属性。这只是为了给用户提供一个编译时错误,这有助于引导他们意识到他们不能使用这个属性,而应该使用派生类中的新函数。
编辑
感谢这个线程中的答案,我想出了以下解决方案:
java - 隐藏超类的方法
我已经阅读了覆盖和隐藏方法教程。由此,我收集了以下内容:
如果子类定义了与超类中的类方法具有相同签名的类方法,则子类中的方法会隐藏超类中的方法。
因此,我做了以下事情:
我不喜欢这种设计的是它append
仍然是子类的可见方法。UnsupportedOperationException
我可以让身体空着,而不是扔掉。但两人都觉得丑。
话虽这么说,有没有更好的方法来隐藏超类的方法?
java - 隐藏静态方法有什么正当理由吗?
可能重复:
为什么 Java 不允许覆盖静态方法?
是否有任何正当理由希望派生类覆盖隐藏static
基类的方法?
c# - 在继承类中隐藏/重载辅助方法时基类方法的行为
我试图创建一个“包装器”,Foo
以便我可以对Test()
何时GetName()
产生意外值的行为进行单元测试。我不能直接影响 in 的行为,GetName()
因为Foo
它依赖于 ASP.NET 管道事件。
我希望
new Bar().Test();
会返回“Bar”,但显然我误解了继承模型。
有什么方法可以实现我需要的吗?
oop - 可以通过向下转换到超类来防止重写方法吗?
我试图了解以下问题的答案在所有主要的 OOP 语言中是否相同;如果不是,那么这些语言有何不同。
假设我有A
定义方法的类act
和jump
;方法act
调用方法jump
。A
的子类B
覆盖方法jump
(即,使用适当的语法来确保无论何时jump
调用,B
都使用类中的实现)。
我有b
类的对象B
。我希望它的行为就像它是类的一样A
。换句话说,我希望jump
使用A
. 我有哪些不同语言的选择?
例如,我可以通过某种形式的向下转换来实现这一点吗?或者也许通过创建一个知道要调用哪些方法的代理对象?
我想避免创建一个全新的类对象A
并仔细设置和之间的内部状态共享,a
因为b
这显然不是面向未来的,而且很复杂。我还想避免将状态复制b
到一个全新的类对象中,A
因为可能有很多数据要复制。
更新
我专门问了这个关于 Python的问题,但似乎这在 Python 中是不可能实现的,从技术上讲,它可以做到......有点......
似乎除了技术上的可行性之外,从设计的角度来看,还有一个强烈的反对这样做的论据。我在一个单独的问题中问这个问题。
c# - 如何在 C# 中的类中隐藏函数?
我需要根据在 c# 中传递给构造函数的参数在类中隐藏一些方法。我该怎么做?提前致谢!
更多信息:我参与了这个 GUI 开发,他们有一个 API 可以访问硬件中的寄存器。现在他们正在发布更新的硬件,所以我需要同时支持具有更新 API 的旧硬件和新硬件(大部分是旧硬件的重复,删除了一些旧的并添加了一些新的寄存器)。
此外,我只需要保留一个名为“API”的类,因为我们在很多地方都使用过它。因此,排除了使用具有不同名称的更新 API 的想法。
现在终于,我想到了将新的包含到旧的中,只是有条件地隐藏注册表访问方法。
c# - C# 中的方法隐藏和阴影有什么区别?
C# 中的方法隐藏和阴影有什么区别?它们是相同的还是不同的?我们可以将它们称为多态性(编译时或运行时)吗?
java - 具有不相关返回类型的继承方法
我有以下代码片段
当我尝试编译它时,我得到了错误。
如何避免这种情况?