C# 在命中属性之前运行一段代码

标签 c#

我有一个方法,我想始终在属性的 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/

相关文章:

c# - TPL FromAsync 与 TaskScheduler 和 TaskFactory

c# - Windows 服务内部轮询的常见做法

c# - 混淆的 DLL 未通过反射加载

c# - 如何使 .net 中的网络浏览器使用最新的 Internet Explorer

c# - 使用 Delphi 使用 WCF - 最大字符串内容长度配额 (8192) 错误

c# - DataRow 比较未按预期工作

c# - 为什么不在 GC.Collect 上重新抛出任务异常

c# - Quartz.Net - 使用 log4net 进行公共(public)日志记录

C# - 从外部命令行应用程序逐字节读取标准输出

c# - 如何模拟电源相关事件进行测试