我有一个方法,我想始终在属性的 get 访问器之前运行。如果不在 get{} 中手动运行该方法,这是否可能?这是我想要工作的示例。
private string _someString;
private string _someOtherString;
public string SomeString
{
get { return _someString; }
}
public string SomeOtherString
{
get { return _someOtherString; }
}
public void AlwaysRun()
{
// Code to always run here.
}
最佳答案
这在 .NET 框架中是不可能的。
但这可以使用一种称为 AOP(面向方面的编程)的技术来完成。这里有一个很好的解释:http://www.sharpcrafters.com/aop.net . AOP 就是在方法调用之前或之后注入(inject)代码;这就是你想做的。有两种方法可以做到这一点:在运行时或在编译时。运行时方式通过覆盖虚拟方法动态生成实现,因此它要求您的方法是虚拟的。如果在编译时执行,则修改实际代码(或 IL)。
一个不错的编译时 AOP 框架是 PostSharp .对于执行运行时 AOP,框架的示例可以是 Castle DynamicProxy .
关于C# 在命中属性之前运行一段代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4565088/