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

如何在C#中使用反射实现字段变更时触发回调?

实现字段值变化时的记录功能

要实现每次Name的值变化时记录该值,直接用公共字段做不到自动监听变化,你需要把字段封装成属性,在属性的set访问器里添加记录逻辑。

修改后的代码如下:

using System;

class Data {
    // 用私有字段存储实际值
    private string _name;
    
    // 封装成公共属性,添加变化监听
    public string Name
    {
        get => _name;
        set
        {
            // 当值发生变化时记录
            if (_name != value)
            {
                Console.WriteLine($"Name字段值已变更:旧值[{_name}] -> 新值[{value}]");
                _name = value;
            }
        }
    }
    
    public Data(string name) {
        _name = name;
        // 初始化时也可以记录一次
        Console.WriteLine($"Name字段初始化值:[{_name}]");
    }
}

public class Test
{
    public static void Main()
    {
        Data data = new("foo");
        
        // 修改Name值,触发记录
        data.Name = "bar";
        data.Name = "bar"; // 值未变化,不会触发记录
        data.Name = "baz";
        
        // 获取当前值
        Console.WriteLine($"当前Name值:{data.Name}");
    }
}

代码说明

  • 把原来的公共字段Name改成私有字段_name,用公共属性Name对外暴露
  • 在属性的set方法里,先判断新值和旧值是否不同,不同则记录变化信息,再更新私有字段
  • 初始化时也可以添加记录,方便追踪初始值
  • 如果值没有变化(比如连续设置相同的值),不会重复记录,避免无效日志

运行这段代码会输出:

Name字段初始化值:[foo]
Name字段值已变更:旧值[foo] -> 新值[bar]
Name字段值已变更:旧值[bar] -> 新值[baz]
当前Name值:baz

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:52:40