gpt4 book ai didi

c# - 如何拦截C#中的静态方法调用

转载 作者:行者123 更新时间:2023-11-30 21:22:32 25 4
gpt4 key购买 nike

我正在尝试在 C# 中实现某种面向​​方面的编程,我在其中取得了一些小的成功,但发现了一些重要的局限性。

其中一个限制是拦截对静态方法的调用的能力。例如,假设我们有下一个对象:

public class SampleObject  
{
public SampleObjectProperty { get; set; }

public SampleObject(int anInteger) { this.SampleObjectProperty = anInteger; }

public int SampleObjectMethod(int aValue)
{
return aValue + this.SampleObjectProperty;
}

public static string GetPI() { return Math.PI.ToString(); }
}

来电者看起来像:

[Intercept]
public class Caller : ContextBoundObject
{
static void Main(string[] args)
{
SampleObject so = new SampleObject(1); // Intercepted successfully.
so.SampleObjectProperty; // Idem.
so.SampleObjectProperty = 2; // Idem.
so.SampleObjectMethod(2); // Idem.

// The next call (invocation) executes perfectly, but is not intercepted.
SampleObject.GetPI(); // NOT INTERCEPTED :(
}
}

使用我的代码,我能够拦截构造函数、实例方法和属性(get 和 set),但不能拦截静态方法。

关于如何捕获静态方法调用有什么建议或想法吗?

最佳答案

我见过的 AOP 工具使用其他技术来允许拦截静态方法。特别是,我想到了 PostSharp,它会在编译后更改您的代码以插入所需的拦截指令。

参见 http://www.postsharp.org/获取更多信息。

使用 ContextBoundObject 技术的拦截仅限于实例方法。

关于c# - 如何拦截C#中的静态方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2238689/

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