问题标签 [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 中覆盖“+=”?(__iadd__() 方法)
是否可以在 Python 中覆盖 += ?
c# - C#:覆盖返回类型
有没有办法覆盖 C# 中的返回类型?如果是这样,如何,如果不是,为什么以及推荐的方法是什么?
我的情况是我有一个带有抽象基类及其后代的接口。我想这样做(不是真的,但作为一个例子!):
RadioactivePoo
当然继承自Poo
.
我想要这样做的原因是,那些使用Cat
对象的人可以使用该Excrement
属性而不必Poo
投入RadioactivePoo
其中,例如,Cat
它仍然可能是Animal
用户可能不一定知道或关心他们的放射性便便的列表的一部分。希望这是有道理的...
据我所知,编译器至少不允许这样做。所以我想这是不可能的。但是你会推荐什么来解决这个问题?
css - 两个连续调用的样式表中的第二个可以覆盖第一个中定义的所有样式吗?
如果我有一个 HTML 页面链接到两个这样调用的样式表:
如果这两个文件定义了完全相同的样式名称,是否真的original.css
不会影响样式页面的结果,并且所有样式都来自于定义的样式override.css
?
我问的原因是:我有一个original.css
我无法修改的,我不想触及调用这个文件的代码行。相反,我想在调用原始文件后立即插入对新文件的调用并覆盖原始文件中定义的所有内容。我不确定这是否可行,是否可取等。
c++ - 为什么我的新操作员不叫
我想看看一个动态加载的库(用 dlopen 等加载)真的使用它自己的新的删除操作符,而不是调用程序中定义的这些操作符。所以我写了以下 library.cpp
并用
或作为受雇俄罗斯人建议尝试(但最终没有任何改变)
Base 类只保存一个 int 值和一个函数 get_value() 来获取这个值。之后我像这样写了client.cpp
并用
执行客户端我只得到一个“新的客户端调用”和一个“删除客户端调用”。即使我像 Employed Russian 建议的那样为库使用编译器开关 -Bsymbolic。
现在:出了什么问题?我认为共享库正在使用他们自己的 new/delete,因此您必须在工厂旁边提供在库代码中创建析构函数销毁。
补充问题:为什么我需要 destroy(Base* p) 函数?如果这个函数只调用客户端的delete-operator,我也可以自己做,即“delete a”而不是最后一行的destroy_module(a)。
我找到的答案:该库还可以提供一个新/删除操作符对。因此,如果我首先使用库的新功能,然后使用客户端的删除功能,我可能会陷入陷阱。可悲的是,直到现在我从未见过我的图书馆使用它自己的新图书馆或删除图书馆......所以最初的问题仍然没有得到回答。
补充:我只指Linux平台。
编辑:重要部分在“雇佣俄罗斯人的回答”的评论中。所以我简而言之给出主要线索:如果有人以这种方式调用 gcc
该库将使用它自己的新/删除运算符。否则结果
在使用调用程序的新/删除运算符的库中。感谢受雇的俄罗斯人!
javascript - 如何在不丢失原始方法的情况下替换方法?
我正在替换(覆盖、改进、添加功能)Date
对象原型中的方法。这是我所做工作的简化版本:
因为我不想丢失标准方法,所以我将原始方法分配给时间变量并在适当时调用它。
有没有办法在不污染命名空间的情况下做到这一点Date.prototype
?
我要问的是同样的问题,仅在 Javascript 中。
c# - 为什么不让一切都“虚拟”呢?
可能重复:
为什么 C# 默认将方法实现为非虚拟方法?
我说的主要是 C#、.NET 3.5,但一般想知道不考虑所有“虚拟”的好处是什么——也就是说,在子类的实例中调用的方法总是执行最子版本那个方法。在 C# 中,如果父方法未使用“virtual”修饰符标记,则情况并非如此。例子:
上面观察到的非虚拟行为究竟有什么好处?我唯一能想到的是“如果 Parent 的作者不希望他的方法是虚拟的怎么办?” 但后来我意识到我想不出一个好的用例。有人可能会争辩说,该类的行为取决于非虚拟方法的运行方式——但在我看来,这似乎是一些糟糕的封装,或者该方法应该被密封。
按照同样的思路,“隐藏”似乎通常是个坏主意。毕竟,如果创建了 Child 对象和方法,似乎是出于特定原因覆盖 Parent 的。而且,如果 Child 实现(并隐藏了父级)NonVirtual(),则很容易无法获得许多人可能认为的调用 Child::NonVirtual() 的“预期”行为。(我说“预期”是因为有时很容易不注意到“隐藏”正在发生)。
那么,不让一切都有“虚拟”行为有什么好处呢?如果很容易出现意外行为,那么隐藏非虚拟父级的好用例是什么?
如果有人好奇我为什么提出这个问题——我最近正在研究 Castle Projects DynamicProxy 库。使用它的一个主要障碍是您想要代理的任何方法(或属性)都必须是虚拟的。对于开发人员来说,这并不总是一种选择(如果我们无法控制源代码)。更不用说 DynamicProxy 的目的是避免代理类与您尝试使用代理实现的任何行为之间的耦合(例如 Logging,或者可能是 Memoization 实现)。并且通过强制虚拟方法来实现这一点,所实现的是 DynamicProxy 与它所代理的所有类的非常薄但钝的耦合 - 想象一下,您有大量标记为虚拟的方法,即使它们从未被继承和覆盖,
无论如何,那里的挫败感让我想知道非虚拟的好处是什么,当似乎让一切虚拟化可能更清楚(我想是 IMO)并且也许(?)有更多的好处。
编辑:标记为社区 wiki,因为这似乎是一个可能有主观答案的问题
documentation - 如何记录覆盖另一个方法的方法?
我一直想知道如何记录一个覆盖来自基类的消息的方法。通常我会为每个公共方法和一些私有的受保护方法添加一个 java 文档。
但是在 eclipse 中为覆盖方法自动生成一个文档块会产生这样的结果:
这是记录覆盖的好方法吗?我应该从基类继承/复制文档吗?
作为这种特殊情况的文档,您在做什么?我想对所使用的做法进行概述。
mysql - 您如何对 Magento Commerce 进行数据库访问 (I/O)?
所以,我想导入、导出和修改数据库。我已经读过我必须通过 XML 来做到这一点,但我并不真正了解他们的文档系统,而且我还没有找到任何好的教程来解释这一点。我正在慢慢阅读这本非常昂贵且简短的书,它在某种程度上回答了我的问题,但我渴望更多。
作为第二个问题,我想要一个订单系统,我可以在其中使用自己的代码发送信息或电子邮件。我假设这将是某种类型的插件,它会在某个时间覆盖或被调用。任何信息都会有帮助。
.net - 如何检查两个对象是否继承自同一个基类?
我正在尝试覆盖 C++ .NET 中的 Object::Equals 但我遇到了一些困难
如果 o 是和 IState,则此代码可以正常工作。但是,我从 IState 继承了 State。如果我传递具有相同内容的状态,我希望我的 Equals 函数返回 true。
我知道 State 与 IState 不同,但是是否有一个运算符可以让我检查它们是否从同一个基类继承?也许重载运算符 typeid可能会有所帮助,但这似乎很麻烦
c# - 在为 ASP.NET 覆盖 C# 中的方法时,我应该调用基类实现吗?
我了解重写方法/函数会从其在基类中的实现重新定义其在派生类中的实现。
现在让我感到困惑的是,如果我在 ASP.NET 中覆盖了一个类,例如CreateChildControls()
(我没有特别原因随机选择它),VS2008 会自动生成:
很好,默认实现只是调用基类' CreateChildControls()
。
所以如果我想运行一些代码,因为我不知道怎么做base.CreateChildControls()
,我应该这样做:
或者,完全忽略什么base.CreateChildControls()
,只是做