如何在嵌套对象的 属性 发生变化时调用方法?

How to invoke a method when a property of a nested object changes?

假设我有 class MyObject:

public class MyObject 
{
     public SomeOtherObject SomeOtherObject { get; set; }

     public void MyMethod()
     {
          //Do something
     }
}

其中MyObject.SomeOtherObject如下:

public class SomeOtherObject 
{
     public string Information { get; set; }
}

假设 属性 SomeOtherObject.Information 由另一个 class 的实例设置。

如何在 MyObject.SomeOtherObject.Information 更改时自动调用 MyObject.MyMethod()

我推荐使用事件。在 class MyObject 中,您可以指定一个事件并为此事件注册一个事件处理程序 - 使用 MyMethod 作为事件处理程序或创建另一个调用 MyMethod 的方法。

然后,重写SomeOtherObject

public class SomeOtherObject 
{
     public string Information
     {
         get => _Information;
         set
         {
             _Information = value;
             // add code to fire the event
         }
     }
     private string _Information;
}

定义事件回调。在 SomeOtherObject 中;

public EventCallback OnInformationChangedEvent { get; set; }

我不确定究竟是什么设置了信息 属性。但最终你需要在 SomeOtherObject class 的某个地方做这件事;

await OnInformationChangedEvent.InvokeAsync();

您甚至可以在 属性 本身的 setter 中执行此操作。

在父 MyObject 中,您可以传递要调用的方法。并按如下方式完善您的方法;

public void MyMethod(object sender, EventArgs e)
{
     //Do something
}

以及定义 SomeOtherObject 的位置;

SomeOtherObject.OnInformationChangedEvent += MyMethod;

还有其他方法可以做到这一点(例如定义您自己的观察者模式,我认为这是 .NET 正在做的事情)。

我没有 运行 该代码,因此我的语法可能略有偏差,但您应该已经掌握了 99%。