我有3个班级A,B,C。
A类创建B .. B类创建C类。
C类在某些操作/操作之后使用某些数据引发事件,这些数据由B类中的事件处理程序处理。
现在我想要处理或将相同的引发事件数据传递给A类。
我知道我可以从B级提出另一个事件并在A中处理它但是有更好的事情 处理此类事件的方式??
修改:
不使用Inheritance.i将给出一个伪代码..
请忽略语法。我做过类似的事情。
Class A
{
B objB;
public void init()
{
objB= new B();
addeventhandler(objB);
objB.init();
}
//Suppose handle response_objB_Event handles event raised by C
private void handleEvent_objB_Event(string message)
{
doSomething(message);
}
}
Class B
{
C objC;
public void init()
{
objC= new C();
addeventhandler(objC);
objC.DoOperation();
}
//Suppose response_objC_Event handles event raised by C
private void handleEvent_objC_Event(string message)
{
//doSomething(message);
again raise event to pass 'message' to B.
}
private void doSomething(string message)
{
//.......do something
}
}
Class C
{
Event evtOperationComplete;
public void DoOperation()
{
//.......do something
// after coompletion
OperationComplete();
}
public void OperationComplete()
{
RaiseEvent(evtOperationComplete,message);
}
public void RaiseEvent(Event E,String message)
{
// raise/invoke event/delgate here
}
}
哦好的thx :) ..
编辑#2
实际上A是创建B的Form,它是SocketManager,C是发送和接收数据的实际套接字类。当C接收数据/消息时,我想在Form上显示它,即A。所以我从C-中引发了事件; B->一种。
THX
答案 0 :(得分:1)
根据我之前的回答,听起来你有继承的继承:
public class A
public class B : A
public class C : B
在这种情况下,您不应该使用事件。相反,使用base
来调用每个基类。
class Program
{
static void Main(string[] args)
{
C c = new C();
c.DoStuff(0);
}
}
public class A
{
public virtual void DoStuff(int x)
{
Console.WriteLine(x);
}
}
public class B : A
{
public override void DoStuff(int y)
{
y++;
base.DoStuff(y);
}
}
public class C : B
{
public override void DoStuff(int z)
{
z++;
base.DoStuff(z);
}
}
此示例显示了C类的创建及其后续的数据编辑。然后将该数据传递给B,B在传递到A之前再次编辑数据。
答案 1 :(得分:0)
如果您没有在B类的事件处理程序中编辑数据,那么只需让A和B两个订阅C中的事件。如果您在B中为A编辑数据,那么我会建议只使用B中的数据调用A中的标准方法。
更新: 根据您的说明,我会说只有2个事件 - 您的套接字(C)类在有数据时触发事件,您的套接字管理器(B)侦听此事件并在有此数据时触发另一个单独的事件。你的表格(A)从B听取这个事件并采取行动。这使你的意图足够清晰。