C# 需要一个模式来为每个实例方法模式调用Verify方法

C# 需要一个模式来为每个实例方法模式调用Verify方法,c#,.net,design-patterns,C#,.net,Design Patterns,我有以下代码: class Foo { public Foo() { Size = true; } private bool _size; protected bool Size { get { _size; } set { _size = value; } } } class CrazyFoo : Foo { public void First() {

我有以下代码:

class Foo
{
    public Foo()
    {
        Size = true;
    }

    private bool _size;

    protected bool Size
    {
        get { _size; }
        set { _size = value; }
    }
}

class CrazyFoo : Foo
{
    public void First()
    {
        if (!Size)
            return;
    }

    public void Second()
    {
        if (!Size)
            return;
    }
    public void Finished()
    {
        if (!Size)
            return;
    }
}
实现这种模式的最佳方式是什么,因为它会让我发疯

   if(!Size) return;
也许我可以用属性或AOP来做

最好最简单的方法是什么


谢谢

也许只需使用一个方法和一个枚举,其值为
第一个
第二个
完成
等。?这很难说,因为除了那张支票,你没有说什么是共同的。AOP可能是一种解决方案,但可能不是,因为方面通常在概念性质上更为通用

顺便说一句,以后可能会为你的样品选择不同的名称,这可能会冒犯一些人。(编辑以匹配新命名)

不过,从“模式”的角度来看,这对我来说似乎并不繁重。在我看来,键入以下内容是完全合理的:

if(!Size) 
    return;
你正在明确地处理你想要的案件。在您的情况下,根据我的判断(从您的原始+编辑),此检查非常具体地针对您正在使用的内容。我个人会选择一个更明显的名字,因为它确实看起来有点奇怪(即使是在你的原稿中),而且并不完全清楚发生了什么


即使使用AOP,您也会在每个方法上添加一些其他信息,以确保您的方面得到处理。

如果在太多方法的开头有相同的guard语句,您可以创建一个名为executeWithGuard的方法:

private void executeWithGuard(Action method)
{
    if (HeadSize) method();
}
然后你可以这样做:

public void ScreenFirstShot()
{
    executeWithGuard(() =>
    {
        // code here
    });
}

public void ScreenSecondShot()
{
    ExecuteWithGuard(() =>
    {
        // code here
    });
}
public void CrazyUp()
{
    ExecuteWithGuard(() =>
    {
        // code here
    });
}
没有比这更少的代码了。。。事实上,可能有更多的代码,但它确实允许您在保护条件发生变化时不必进行查找/替换。不过,我建议这只是最后的办法。您真正的问题很可能是您在调用树中执行验证的距离太远。如果您可以在更高的级别上进行验证,那么您就可以避免所有这些验证

同时

看一看这张照片。在某些特殊情况下,可以使用此模式来防止或简化状态检查

同样(第2版)

很难知道您的意图是什么,因为问题集中在一个特定的解决方案上,但是如果您按顺序执行这些方法,您可以考虑使用,并在基本策略类中进行检查