执行代码块前后的方法

本文关键字:方法 代码 执行 | 更新日期: 2023-09-27 18:27:26

如何将一些代码封装在括号中以完成以下操作?

MyCustomStatement(args){
// code goes here
}

因此,在方括号中的代码执行之前,它将调用一个方法,当方括号中代码完成执行时,它将呼叫另一个方法。有这样的事情吗?我知道当我可以简单地调用代码前后的方法时,这样做似乎是多余的,但我只是很好奇。我不知道该怎么说,因为我是编程新手。

谢谢!

执行代码块前后的方法

您可以通过将代码存储在一个抽象类中来实现这一点,该抽象类在调用Run():时为您执行"before"answers"after"代码

public abstract class Job
{
    protected virtual void Before()
    {
        // Executed before Run()
    }
    // Implement to execute code
    protected abstract void OnRun();
    public void Run()
    {
        Before();
        OnRun();
        After();
    }
    protected virtual void After()
    {
        // Executed after Run()
    }
}
public class CustomJob : Job
{
    protected override void OnRun()
    {
        // Your code
    }
}

在呼叫代码中:

new CustomJob().Run();

当然,对于每一段自定义代码,您都必须创建一个新的类,这可能不太理想。

一种更简单的方法是使用Action:

public class BeforeAndAfterRunner
{
    protected virtual void Before()
    {
        // Executed before Run()
    }
    public void Run(Action actionToRun)
    {
        Before();
        actionToRun();
        After();
    }
    protected virtual void After()
    {
        // Executed after Run()
    }
}

你可以这样称呼它:

public void OneOfYourMethods()
{
    // your code
}
public void RunYourMethod()
{
    new BeforeAndAfterRunner().Run(OneOfYourMethods);
}

要真正实现您想要的目标,您可以使用委托:

Action<Action> callWithWrap = f => {
    Console.WriteLine("Before stuff");
    f();
    Console.WriteLine("After stuff");
};
callWithWrap(() => {
    Console.WriteLine("This is stuff");
});

这需要在块中添加"奇怪的语法",并了解C#中的委托和匿名函数是如何工作的。更常见的情况是,如果你在一个类中这样做,请使用@CodeCaster的答案中演示的技术。