背景故事:
所以我试图回答这个问题,但不确定如何解决。我认为也许有人在这里有很好的学习资源,或者可以给出清晰的答案。
简而言之,我想知道在标准C#OOP编程中哪些在性能上更好,哪些在实践上更好。
问题:
是更好地准备一个事件,还是让消费者注入一个可以被结果调用的动作呢?
示例:
例如,我正在构建一个搜索面板。我的小组应该真的很擅长搜索,但并不十分在乎其结果的使用方式。
因此,我的两个选择是,在我的视图模型中创建一个完成的事件,并从与结果相关的内容中进行连接,或者选择第二个选项,允许调用者注入将在搜索时调用的回调操作。完成了。
我最初的想法是至少它们是相等的,因为事件和操作都应该只是被调用的函数引用指针。但是,我可以看到气泡事件的效果较差。
示例代码:
public class Consumer{
public Consumer(){
StandardViewModel viewModel = new StandardViewModel(CompletedCallback);
viewModel.customEvent += someEventHandler;
}
public void someEventHandler(Object sender, EventArgs args){
// do something with results
}
public void CompletedCallback(List<string> results){
// do something with results
}
}
public class StandardViewModel{
public event EventHandler customEvent;
private Action<IEnumerable<string> _callback;
public StandardViewModel(Action<IEnumerable<string>> callback){
_callback = callback;
}
}
答案 0 :(得分:2)
性能差异很小。
object sender, EventArgs args
自变量(尽管这是可选的)。这可能会导致微小的性能差异。与仅将委托传递给构造函数相比,附加到事件上的性能成本也很小。这些都是非常小的要点。
应基于代码质量考虑使用哪种回调样式?
使用哪种样式取决于应该使用该类的方式。在这里,我更喜欢将事件样式设置为 bit ,因为您确实不以任何方式关注订户列表。