问题标签 [overriding]
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.
python - 扩展 Python 的内置 Str
我正在尝试子类化str
,但由于它的不变性而遇到了一些困难。
对于不需要任何新功能的继承方法,例如derived.lower()
,是否有一种简单的 Pythonic 方法来返回类型对象DerivedClass
(而不是str
)?或者我是否像以前那样手动覆盖每个 str.method() derived.upper()
?
编辑:
c# - 为什么 C#/CLR 不支持方法覆盖协/逆变?
有很多关于破解 C# 的限制的问题和答案,不允许方法返回(和参数)类型在覆盖时更改为兼容类型,但为什么在 C# 编译器或 CLR 中存在此限制?如我所见,如果允许协方差,没有什么可以破坏的,那么它背后的原因是什么?
可以询问类似的问题来扩大访问参数 - 例如用公共方法覆盖受保护的内部方法(Java支持的东西,IIRC)
ruby-on-rails - 覆盖 Rails 中的属性并获取底层值
对于我的生活,我无法弄清楚如何做到这一点。我有一个模型,它的存储值是文件系统上资源的路径。我希望模型从文件系统中写入和获取资源,所以我自然想覆盖 getter 和 setter 来执行此操作。然后我如何获得数据库中的基础价值?
下划线在哪里?我见过'write_attribute'曾经这样做过,但它似乎已被弃用。有任何想法吗?当然,吸气剂也是如此。
另外,如果我在覆盖方面说错了,我很想听听更好的技术。唯一不能选择的是将值直接存储在数据库中。
谢谢!
c++ - 从覆盖函数调用覆盖函数
假设我在 B 类中有虚函数 foo(),并且我需要在 B 的派生类 D 类中稍有不同的行为。创建覆盖函数 D::foo() 并调用 B::foo( ) 从那里,经过特殊情况处理?像这样:
我不是在问这是否可行,我知道它会。我想知道,就良好的 OOD 而言,它是否正确。
c# - 为可变对象覆盖 GetHashCode?
我已经阅读了大约 10 个关于何时以及如何覆盖的不同问题,GetHashCode
但仍有一些我不太明白的问题。的大多数实现GetHashCode
都是基于对象字段的哈希码,但有人指出,GetHashCode
在对象的生命周期内,值永远不会改变。如果它所基于的字段是可变的,那它是如何工作的?另外,如果我确实希望字典查找等基于引用相等而不是我的覆盖Equals
怎么办?
我主要是Equals
为了便于对我的序列化代码进行单元测试而重写,我假设序列化和反序列化(在我的情况下为 XML)会杀死引用相等,所以我想确保它至少通过值相等是正确的。Equals
在这种情况下,这是一种不好的做法吗?基本上在大多数执行代码中,我想要引用相等,我总是使用==
并且我没有覆盖它。我应该只创建一个新方法ValueEquals
或其他东西而不是覆盖Equals
吗?我曾经假设框架总是使用==
而不是Equals
比较事物,所以我认为重写它是安全的,Equals
因为在我看来,它的目的是如果你想要一个不同于==
操作员。从阅读其他几个问题来看,情况似乎并非如此。
编辑:
似乎我的意图不清楚,我的意思是 99% 的时间我想要简单的旧引用相等,默认行为,没有意外。对于非常罕见的情况,我想要值相等,并且我想通过使用.Equals
而不是显式请求值相等==
。
当我这样做时,编译器建议我也覆盖GetHashCode
,这就是这个问题的出现方式。GetHashCode
当应用于可变对象时,似乎存在矛盾的目标,这些目标是:
- 如果
a.Equals(b)
那么a.GetHashCode()
应该== b.GetHashCode()
。 - 的值在
a.GetHashCode()
的生命周期内永远不会改变a
。
当一个可变对象时,这些看起来自然是矛盾的,因为如果对象的状态发生变化,我们期望 的值发生.Equals()
变化,这意味着GetHashCode
应该改变以匹配 的变化.Equals()
,但GetHashCode
不应该改变。
为什么会出现这种矛盾?这些建议是否不适用于可变对象?可能是假设的,但可能值得一提的是,我指的是类而不是结构。
解析度:
我将 JaredPar 标记为已接受,但主要用于评论交互。总结一下我从中学到的是,实现所有目标并避免极端情况下可能出现的古怪行为的唯一方法是仅覆盖Equals
和GetHashCode
基于不可变字段,或实现IEquatable
. 这种似乎减少了覆盖Equals
引用类型的用处,因为据我所见,大多数引用类型通常没有不可变字段,除非它们存储在关系数据库中以用它们的主键来识别它们。
java - Java 接口:继承、覆盖和重载方法
在 Ken Arnold、James Gosling、David Holmes 撰写的“THE Java™ Programming Language, Fourth Edition”中,它提到:
段落:(4.3.2) “同样,如果一个接口继承了多个具有相同签名的方法,或者如果一个类实现了包含具有相同签名的方法的不同接口,则只有一个这样的方法。该方法的实现最终由实现接口的类定义,没有歧义。如果方法具有相同的签名但返回类型不同,则返回类型必须是所有其他类型的子类型,否则编译时错误发生。实现必须定义一个返回该公共子类型的方法。
任何人都可以给我一些示例代码来证明上述段落的观点吗?
我尝试编写代码并测试所提到的内容,但出现编译时错误,子接口隐藏了基本接口方法,因此只能实现子接口方法。
提前致谢。-阿伦
xslt - XSLT 模板覆盖
我有一个关于 XSLT 模板覆盖的小问题。对于我的 XML 的这一部分:
在我的 XSLT 工作表中,我有两个按以下顺序排列的模板:
我想要做的是将药物元素下的所有内容复制到输出,而不是“名称”元素(或我明确定义的任何其他元素)。最终的 xml 将以 RAW XML 形式显示给用户。换句话说,我想要的结果是:
而我得到与输入相同的 XML,即没有用文本替换元素。为什么第二个模板匹配没有覆盖第一个模板中的 name 元素的任何想法?提前致谢
——阿里
jquery - jQuery UI DatePicker:覆盖今天的 css
我正在使用 beforeShowDay 突出显示我的 jQuery 日期选择器中的特殊日子。我能够更改背景的唯一方法是在我的 css 类中使用“!important”标签。这适用于除“今天”之外的所有日子。css 不改变背景颜色,只改变边框。
我的CSS:
c++ - 在 C++ 中重写基的重载函数
可能重复:
C++ 重载决议
我遇到了一个问题,在我的类覆盖其基类的一个函数后,所有重载版本的函数都被隐藏了。这是设计使然还是我只是做错了什么?
前任。
下面会给出一个编译错误,说明 bar 中没有 a(double) 函数。
python - 覆盖python中的静态方法
参考这里关于python的绑定和未绑定方法的第一个答案,我有一个问题:
产生输出:
有没有办法覆盖python中的静态方法?
我希望b_test.method_three()
打印“T2”,但它没有(改为打印“Called method_two”)。