c# - 有条件地阻止方法覆盖

标签 c# .net design-patterns

我有一个应用程序,其中父对象有一个执行验证的方法,每个子对象都覆盖该方法以执行额外的验证。像这样的东西:

class Parent {
    virtual void DoValidations (Delegate addErrorMessage) {
        //do some validations
    }
}

class Child : Parent {
    override void DoValidations (Delegate addErrorMessage) {
         base.DoValidations(addErrorMessage); //the parent method is always called
         //do some extra validations
   }
}

我添加了一个新的“IsDisabled”属性,当该属性为真时,该方法将不会执行任何验证。

class Parent {
    boolean IsDisabled;

    virtual void DoValidations (Delegate addErrorMessage) {
        if (IsDisabled)
            return;
        //do some validations
    }
}

我还希望对于每个 child ,如果“IsDisabled”属性为真,则不会执行额外的验证。在这里使用什么模式更好?

最佳答案

我会用一个单独的方法拆分该功能:

private void DoValidations(Delegate addErrorMessage)
{
    if (!this.IsDisabled)
    {
        this.OnDoValidations(addErrorMessage);
    }
}

virtual void OnDoValidations(Delegate addErrorMessage) { }

现在,可以随意覆盖 OnDoValidationsIsDisabled 检查将在基类内部完成。

关于c# - 有条件地阻止方法覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34355532/

相关文章:

c# - PostAsJsonAsync 之后 WebApi 方法中的对象为空

C# - 第二个参数等于字符串长度的字符串 IndexOf 方法

c# - Main() 不想访问类变量

.net - 具有某些特殊字符的密码的正则表达式,不包括所有其他字符

c# - 位图的 OutOfMemoryException 错误

java - 在 ElasticSearch 中存储 News Feed 的最佳设计模式

java - 设计模式 - 静态变量的继承

c# - 如何查看 C# 数组在内存中的放置方式?

c# - SECURITY_ATTRIBUTES 何时更改,为什么更改?

c# - 策略模式与依赖注入(inject)