gpt4 book ai didi

c# - 冒泡事件的首选方式是什么?

转载 作者:可可西里 更新时间:2023-11-01 03:07:54 25 4
gpt4 key购买 nike

我有三个对象 ObjectA 有一个 ObjectB,ObjectB 有一个 ObjectC。当 ObjectC 触发一个事件时,我需要 ObjectA 知道它,所以这就是我所做的......

public delegate void EventFiredEventHandler();

public class ObjectA
{
ObjectB objB;

public ObjectA()
{
objB = new ObjectB();
objB.EventFired += new EventFiredEventHandler(objB_EventFired);
}

private void objB_EventFired()
{
//Handle the event.
}
}

public class ObjectB
{
ObjectC objC;

public ObjectB()
{
objC = new ObjectC();
objC.EventFired += new EventFiredEventHandler(objC_EventFired);
objC.FireEvent();
}

public event EventFiredEventHandler EventFired;
protected void OnEventFired()
{
if(EventFired != null)
{
EventFired();
}
}

private void objC_EventFired()
{
//objC fired an event, bubble it up.
OnEventFired();
}
}

public class ObjectC
{
public ObjectC(){}

public void FireEvent()
{
OnEventFired();
}

public event EventFiredEventHandler EventFired;
protected void OnEventFired()
{
if(EventFired != null)
{
EventFired();
}
}
}

这是处理此问题的正确方法,还是有更好的方法?我根本不想让 ObjectA 知道 ObjectC,只希望它引发了一个事件。

最佳答案

另一种方法是使用添加/删除来包装它:

public class ObjectB
{
ObjectC objC;

public ObjectB()
{
objC = new ObjectC();
}

public event EventFiredEventHandler EventFired
{
add { this.objC.EventFired += value; }
remove { this.objC.EventFired -= value; }
}
}

关于c# - 冒泡事件的首选方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4349195/

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