Questions tagged «virtual-functions»

8
什么时候不使用虚拟析构函数?
我相信我搜索了许多有关虚拟析构函数的内容,其中大多数提到虚拟析构函数的目的以及为什么需要虚拟析构函数。我还认为,在大多数情况下,析构函数必须是虚拟的。 然后的问题是:为什么c ++默认不将所有析构函数设置为虚拟?或其他问题: 什么时候不需要使用虚拟析构函数? 在这种情况下,我不应该使用虚拟析构函数? 即使我不需要虚拟析构函数,使用虚拟析构函数的成本是多少?


3
永远不要让公众成员虚拟/抽象-是吗?
早在2000年代,我的一位同事就告诉我,将公共方法虚拟化或抽象化是一种反模式。 例如,他认为这样的课程设计得不好: public abstract class PublicAbstractOrVirtual { public abstract void Method1(string argument); public virtual void Method2(string argument) { if (argument == null) throw new ArgumentNullException(nameof(argument)); // default implementation } } 他说 实现Method1并重写的派生类的开发人员Method2必须重复参数验证。 如果基类的开发人员决定在Method1或Method2以后的可自定义部分周围添加一些内容,他将无法执行。 相反,我的同事提出了这种方法: public abstract class ProtectedAbstractOrVirtual { public void Method1(string argument) { if (argument == null) throw new …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.