c# - 类似于带有定义 c# 的抽象的东西

标签 c# validation virtual-functions abstract-methods

也许这首先是糟糕的设计,但我有一个抽象基类,它有一个方法 validate

public abstract class abClass{
  string str1;
  string str2;

  public virtual bool validate(){...};
}

我知道每个派生类都有需要验证的属性,但我不想复制粘贴 str1str2 的验证每个抽象方法。

我想确保 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/

相关文章:

c# - 面向 .NET Core 2.0

ruby-on-rails - 多个对象 Rails 上的相关验证

c - 从重定向为输入的文件中验证日期

jquery - 定义何时触发 onclick

C++ 析构函数作为虚函数?

c# - Azure + HDInsight 的本地模拟

c# - 加密和解密 19 位长的 BigInteger

c++ - std::shared_ptr 控制 block 中的虚函数

c++ - 使用非虚基类函数与派生类非实现虚函数的区别

c# - 来自 C# 的多个更新和插入