gpt4 book ai didi

c# - 在多个方法运行后执行一个方法

转载 作者:太空狗 更新时间:2023-10-29 17:55:04 26 4
gpt4 key购买 nike

我有一个看起来像这样的类:

public class SomeClass
{
public void SomeMethod1() { ... }
public void SomeMethod2() { ... }
public void SomeMethod3() { ... }

private void SomeSpecialMethod(SomeParameter) { ... }
}

目前,我让前 3 个方法中的每一个在这些方法返回之前调用 SomeSpecialMethod()。我将添加大约 15 个方法,这些方法最终都需要执行 SomeSpecialMethod() 我想知道是否有办法说 “当这个中的任何方法类运行,执行 SomeSpecialMethod()" 而不必在每个方法结束时显式重复调用,当然可以防止 SomeSpecialMethod() 无限调用自身.

感谢您的建议。

最佳答案

您正在寻找 AOP - 面向方面的编程。

C# 不遵循此范例,但您可以模仿它。 PostSharp是一种选择,但我会改用 CaSTLe 拦截器/DynamicProxy:http://docs.castleproject.org/Windsor.Interceptors.ashx

您需要创建一个拦截器来环绕您的对象并拦截对它的调用。在运行时,CaSTLe 将使这个拦截器扩展您的具体类或实现一个公共(public)接口(interface) - 这意味着您将能够将拦截器注入(inject)任何以 SomeClass 为目标的代码段。您的代码看起来像这样:

public class Interceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
{
invocation.Proceed();
//add your "post execution" calls on the invocation's target
}
}

编辑

CaSTLe 的 AOP 简介:http://docs.castleproject.org/Windsor.Introduction-to-AOP-With-Castle.ashx

拦截器和一般的 AOP 通常用于记录对象的每个方法调用的结果,或记录任何方法抛出的每个异常。

如果 SomeSpecialMethod 中的逻辑是抽象的并且与 SomeClass 没有真正相关(例如日志记录),那么将逻辑移至拦截器本身可能是有意义的- 但这取决于您。

关于c# - 在多个方法运行后执行一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20168717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com