C# 从封装的类传递事件
如果我有一个封装了类B实例的类a,那么有可能通过类a的实例传递在类B中引发的事件吗?例如:C# 从封装的类传递事件,c#,events,encapsulation,C#,Events,Encapsulation,如果我有一个封装了类B实例的类a,那么有可能通过类a的实例传递在类B中引发的事件吗?例如: public classB { ... public event EventArgs SomeEvent; protected virtual void OnSomeEvent(EventArgs e) ... } public classA { ... private classB = new ClassB(); ... } 我希望发生的是,类
public classB
{
...
public event EventArgs SomeEvent;
protected virtual void OnSomeEvent(EventArgs e)
...
}
public classA
{
...
private classB = new ClassB();
...
}
我希望发生的是,类A的任何实例也会公开某个事件,当它由类B引发时,它由类A引发
有人能提供帮助或建议吗?简单的课程没有什么比这更好的。当ClassB引发事件时,您应该订阅ClassB事件并从ClassA引发事件:
public class ClassA
{
public event EventHandler SomeEvent = (s,e) => { };
private ClassB classB = new ClassB();
public ClassA()
{
classB.SomeEvent += (s,e) => SomeEvent(this, e);
}
}
更经典的方式:
public ClassA
{
public event EventHandler SomeEvent;
private ClassB classB = new ClassB();
public ClassA()
{
classB.SomeEvent += ClassB_SomeEvent;
}
private void ClassB_SomeEvent(object sender, EventArgs e)
{
if (SomeEvent != null)
SomeEvent(this, e);
}
}
另一个选项是将事件委托给原始类:
public class ClassA
{
private ClassB classB = new ClassB();
public event EventHandler SomeEvent
{
add
{
classB.SomeEvent += value;
}
remove
{
classB.SomeEvent -= value;
}
}
}
这意味着当在ClassB
中引发事件时,ClassA.SomeEvent
的所有订阅者也将收到通知,因为他们实际上订阅了ClassB.SomeEvent
。我不确定这是否是您真正想要的,但在任何情况下,您都可以使用subscribe和raise方法
不过这里有一个陷阱:
sender
对象将是ClassB
的一个实例,而不是ClassA
,这意味着您不能在WPF withINotifyDataErrorInfo
验证中委托事件,例如,视图模型本身将引发验证事件。然后您只需订阅并筹集资金。谢谢您的帮助!这正是我想要的。谢谢你的回复。这是非常有价值的信息。