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
相关产品推荐
相关产品推荐

