gpt4 book ai didi

c# - 将基类中最复杂的方法声明为虚方法

转载 作者:行者123 更新时间:2023-11-30 14:55:03 24 4
gpt4 key购买 nike

我一直在阅读 Jeffrey Richter 的 CLR via C# 一书,他认为在基类中定义方法时,如果有一个方法你想声明为虚方法并且它有一些方便的重载,最复杂方法应该是虚拟方法,其他应该保留为非虚拟方法。这是他给出的例子:

public class Set {
private Int32 m_length = 0;
// This convenience overload is not virtual
public Int32 Find(Object value) {
return Find(value, 0, m_length);
}
// This convenience overload is not virtual
public Int32 Find(Object value, Int32 startIndex) {
return Find(value, startIndex, m_length - startIndex);
}
// The most feature-rich method is virtual and can be overridden
public virtual Int32 Find(Object value, Int32 startIndex, Int32 endIndex) {
// Actual implementation that can be overridden goes here...
}
// Other methods go here
}

这里的理性是什么?

最佳答案

答案是 - DRY principle - a single source of truth .方法 A 是最复杂的。 B、C 和 D 都使用其功能的子集。所以程序员是这样创建的,所有进一步的代码修改都是基于你保持 A、B、C、D 之间关系的假设。如果你允许所有 B、C、D 都可以被覆盖,那么你就打破了原来的想法在类里面。

代码可读性受到影响,人们阅读您的基类,描绘它如何工作的图片,然后阅读您的类,并认为他们刚刚学到的东西与您的实现不同。让团队努力工作。同样,当您在 5 年后阅读您的代码时(如果需要的话)。

关于c# - 将基类中最复杂的方法声明为虚方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26281771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com