【发布时间】:2014-07-01 20:37:55
【问题描述】:
也许这首先是一个糟糕的设计,但我有一个抽象基类,它有一个方法validate
public abstract class abClass{
string str1;
string str2;
public virtual bool validate(){...};
}
我知道每个派生类都有需要验证的属性,但我不想为每个抽象方法复制粘贴 str1 和 str2 的验证。
我想确保未来的开发人员(包括我自己)会记得包含并填写验证方法。从我所见,没有办法给抽象方法一个定义,或者强制一个虚拟方法被覆盖。
到目前为止,我所听到的所有关于此的内容都是“您应该让开发人员选择他/她想要做的事情。”这对我来说还不够好,它违背了制衡,以帮助你不犯错误。我不介意他们是否主动选择没有任何实现代码,但如果他们忘记了,那么当派生字段未经过验证时,这将导致头疼。
对这个问题有什么建议吗?
【问题讨论】:
-
使
validate成为抽象方法而不是虚拟方法?你可以重构出常见的逻辑。 -
所以你想强制一个覆盖,而那个覆盖必须调用基类?我认为没有办法在语言中强制执行。那是您要/想要的吗?
-
@BradleyDotNET 我记得 Martin Fowler 讨论过这个......
-
你担心的问题是真实存在的,并且源于“呼叫超级”anti-patterns。
标签: c# validation virtual-functions abstract-methods