You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何实现属性获取后的触发事件?附代码示例

在C#中实现属性获取时触发事件

要实现获取Title属性时触发指定逻辑(比如你的OnBeforeGet方法),可以通过手动实现属性的get访问器完成,以下是两种可行方案:

方案一:直接在属性get访问器中调用方法

这种方式简单直接,适合逻辑固定的场景。注意要避免在触发的方法中再次调用属性setter(否则会递归触发get访问器导致无限循环),应直接操作私有字段:

public class ModelClass : IDisposable
{
    private string _title;

    public string Title
    {
        get
        {
            OnBeforeGet(); // 获取属性时触发方法
            return _title;
        }
        set => _title = value;
    }

    public void OnBeforeGet()
    {
        _title = "Value"; // 直接赋值给私有字段,避免递归调用
        // 这里可添加其他需要执行的逻辑
    }

    public void Dispose()
    {
        // 实现IDisposable的资源清理逻辑(如果需要)
    }
}

调用Test方法无需修改,当执行var title = modelClass.Title;时,会自动触发OnBeforeGet方法。

方案二:使用事件委托实现灵活触发

如果需要支持多个订阅者或动态添加逻辑,使用事件委托会更灵活:

public class ModelClass : IDisposable
{
    private string _title;

    // 定义属性获取前的事件
    public event Action OnBeforeGet;

    public string Title
    {
        get
        {
            OnBeforeGet?.Invoke(); // 触发事件,空值运算符防止空引用异常
            return _title;
        }
        set => _title = value;
    }

    public void Dispose()
    {
        // 资源清理逻辑
    }
}

在Test方法中订阅事件并添加自定义逻辑:

public void Test()
{
    using (var modelClass = new ModelClass())
    {
        // 订阅事件,可添加多个订阅者
        modelClass.OnBeforeGet += () => 
        {
            modelClass.Title = "Value";
            // 这里可扩展更多自定义操作
        };
        var title = modelClass.Title; // 获取属性时触发事件
    }
}

内容的提问来源于stack exchange,提问作者Mohammadreza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 15:55:18