如何在嵌套对象的 属性 发生变化时调用方法?
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%。
假设我有 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%。