也许这首先是糟糕的设计,但我有一个抽象基类,它有一个方法 validate
public abstract class abClass{
string str1;
string str2;
public virtual bool validate(){...};
}
我知道每个派生类都有需要验证的属性,但我不想复制粘贴 str1
和 str2
的验证每个抽象方法。
我想确保 future 的开发人员(包括我自己)会记得包含并填写验证方法。据我所知,没有办法给抽象方法一个定义,或者强制重写一个虚方法。
到目前为止,我所听到的关于此的所有内容都是“您应该让开发人员选择他/她想做什么”。这对我来说不够好,它违背了检查和平衡以帮助您不犯错误。我不介意他们是否主动选择没有任何实现代码,但如果他们忘记了,那么当派生字段未被验证时,这将在以后引起麻烦。
对这个问题有什么建议吗?
最佳答案
您可以使用 Template method图案:
public bool Validate()
{
// Call base class validation
if (!ValidateCore())
return false;
// Call specific validation code (overridden by derived classes)
return ValidateOverride();
}
private bool ValidateCore()
{
// Validate str1 and str2
// ...
}
protected abstract bool ValidateOverride();
这样,派生类必须覆盖 ValidateOverride
(因为它是抽象的),并且它们不能忘记调用 ValidateCore
,因为它是由非虚拟对象调用的基类中的方法。
关于c# - 类似于带有定义 c# 的抽象的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24518882/