如何更新父属性?Class2的Demo2赋值时触发Class1的Demo属性代码
如何在子类属性更新时触发父类属性的逻辑
嘿,我来帮你搞定这个问题!核心思路就是在子类的Demo2属性的setter里,主动关联父类Class1中Demo属性的逻辑——要么直接调用父类Demo的赋值操作(如果父类Demo的setter本身包含你要执行的代码),要么把父类的逻辑单独抽成方法,让子类直接调用。
方案一:直接调用父类属性的setter
如果父类的Demo属性已经写好了你要触发的逻辑,那最简单的方式就是在子类Demo2的setter里给父类的Demo赋值:
// 父类Class1 public class Class1 { private string _demo; public string Demo { get => _demo; set { _demo = value; // 这里是你希望触发的核心逻辑 Console.WriteLine($"Class1的Demo属性已更新,当前值:{_demo}"); // 其他业务代码... } } } // 子类Class2 public class Class2 : Class1 { private string _demo2; public string Demo2 { get => _demo2; set { _demo2 = value; // 触发父类Demo属性的逻辑:直接给base.Demo赋值 // 你可以根据需求传递对应的值,不一定是Demo2的value base.Demo = value; } } }
当你给Class2的Demo2赋值时,子类的setter会先处理自己的字段,然后自动触发父类Demo属性里的所有逻辑。
方案二:提取父类逻辑为独立方法(更灵活)
如果你不想修改父类Demo属性的实际值,只是想执行它对应的逻辑,那可以把父类的逻辑抽成一个受保护的方法,让子类直接调用:
// 父类Class1 public class Class1 { private string _demo; public string Demo { get => _demo; set { _demo = value; // 调用抽离的逻辑方法 ExecuteDemoLogic(value); } } // 把核心逻辑抽成受保护方法,子类可直接调用 protected void ExecuteDemoLogic(string inputValue) { Console.WriteLine($"Class1的Demo逻辑已执行,输入值:{inputValue}"); // 其他业务代码... } } // 子类Class2 public class Class2 : Class1 { private string _demo2; public string Demo2 { get => _demo2; set { _demo2 = value; // 直接调用父类的逻辑方法,无需修改Demo属性的值 base.ExecuteDemoLogic(value); } } }
这种方式更灵活,能避免不必要的父类属性值修改,同时保证逻辑复用。
内容的提问来源于stack exchange,提问作者Zeki Gürsoy
相关产品推荐
相关产品推荐

