如何解决当嵌套对象的属性更改时如何调用方法?
假设我有 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
是由另一个类的实例设置的。
如何在 MyObject.MyMethod()
更改时自动调用 MyObject.someOtherObject.information
?
解决方法
我建议使用事件。在类 MyObject
中,您可以指定一个事件并为此事件注册一个事件处理程序 - 使用 MyMethod
作为事件处理程序或创建另一个调用 MyMethod
的方法。
然后,重写SomeOtherObject
:
public class SomeOtherObject
{
public string Information
{
get => _Information;
set
{
_Information = value;
// add code to fire the event
}
}
private string _Information;
}
,
定义一个事件回调。在其他对象中;
public EventCallback OnInformationChangedEvent { get; set; }
我不确定究竟是什么设置了 Information 属性。但最终你需要在 SomeOtherObject 类中的某处使用一行来执行此操作;
await OnInformationChangedEvent.InvokeAsync();
您甚至可以在属性本身的 setter 中执行此操作。
在父 MyObject 中,您可以传递要调用的方法。并按如下方式改进您的方法;
public void MyMethod(object sender,EventArgs e)
{
//Do something
}
以及在何处定义 SomeOtherObject;
SomeOtherObject.OnInformationChangedEvent += MyMethod;
还有其他方法可以做到(例如定义您自己的观察者模式,我认为这就是 .NET 在底层所做的)。
我没有运行那段代码,所以我的语法可能有点偏差,但你应该已经 99% 了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。