gpt4 book ai didi

c# - 使用 MessagingCenter 和标准 .NET 事件处理程序来通知相关方更改有什么区别?

转载 作者:太空狗 更新时间:2023-10-30 00:22:58 25 4
gpt4 key购买 nike

使用 MessagingCenter 和标准 .NET 事件处理程序来通知相关方更改有什么区别?

下面展示了同一事物的两个(未经测试的)实现:

public class FooClass {
public event EventHandler SomeEvent;

public void DoSomeWork() {
// ... stuff
if(SomeEvent != null)
SomeEvent(this, EventArgs.Empty);
}
}

public class BarClass {
FooClass _foo;

public BarClass() {
_foo = new FooClass();
_foo.SomeEvent += delegate {
// ... did something
};
}
}

诗句:

public class FooClass {
public const string SomeEventName = "SomeEvent";
public void DoSomeWork() {
// ... stuff
MessagingCenter.Send<FooClass>(this, SomeEventName);
}
}

public class BarClass : IDisposable {
public BarClass() {
MessagingCenter.Subscribe<FooClass>(this, FooClass.SomeEventName, delegate {
// .. did something
});
}

public void Dispose() {
MessagingCenter.Unsubscribe<FooClass>(this, FooClass.SomeEventName);
}
}

据我所知,这似乎没有任何区别,但如果有人可以提出任何优点缺点,那将帮助我理解.目前,我一直在使用事件处理程序。

Is there any point in switching to using MessagingCenter? Or any new best practice?

最佳答案

Xamarin 的 MessagingCenter 用于减少 ViewModel 之间的耦合,因为发送方和接收方不需要相互了解。

您仍然可以通过创建类似“EventHub”/“EventAggregator”的东西来构建类似的结构,它知道发送者和接收者并使用 .NET 事件。

MessagingCenter 本身是一种 EventAggregator

Image of EventAggregator

图片来源:https://msdn.microsoft.com/en-us/library/ff921122.aspx

Here是对 EventAggregators 的一个很好的解释。

An Event Aggregator is a simple element of indirection. In its simplest form you have it register with all the source objects you are interested in, and have all target objects register with the Event Aggregator. The Event Aggregator responds to any event from a source object by propagating that event to the target objects.

回答问题:

Is there any point in switching to using MessagingCenter? Or any new best practice?

如果您不使用类似 EventAggregator 的东西,那么切换到 MessagingCenter 是一个不错的选择,您自己构建一个 EventAggregator。作为Saruman很好地暗示了耦合是什么。您总是希望减少耦合以获得干净的代码。

关于c# - 使用 MessagingCenter 和标准 .NET 事件处理程序来通知相关方更改有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47977912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com