C#使用属性公开事件
我需要使用另一个类的属性公开一个类实例的事件 如果我公开了一个在C#使用属性公开事件,c#,events,properties,C#,Events,Properties,我需要使用另一个类的属性公开一个类实例的事件 如果我公开了一个在MyClass中定义的事件,并且在同一个MyClass中定义了一个属性,那么该事件就像一个备份字段一样工作,那么一切都正常: private event EventHandler<EventArgs> _somethingHappened; public EventHandler<EventArgs> SomethingHappened { get => _somethingHappened;
MyClass
中定义的事件,并且在同一个MyClass
中定义了一个属性,那么该事件就像一个备份字段一样工作,那么一切都正常:
private event EventHandler<EventArgs> _somethingHappened;
public EventHandler<EventArgs> SomethingHappened
{
get => _somethingHappened;
}
其中,实例
是该另一类
的实例,而实例。Started
在另一类
中定义如下:
public EventHandler<EventArgs> SomethingStarted
{
get => Instance.Started;
}
public event EventHandler<EventArgs> Started;
公共事件事件处理程序已启动;
然后我得到错误:“事件只能出现在左侧”
我只是不明白为什么第一种情况是允许的,第二种情况是不允许的,尽管它们看起来非常相似
我需要使用另一个类的属性公开一个类实例的事件
你不应该这样使用事件。事件应始终作为事件公开
您可以通过自己的类公开其他类的事件:
public event EventHandler<EventArgs> SomethingHappened
{
add => Instance.Started += value;
remove => Instance.Started -= value;
}
public event EventHandler发生了一些事情
{
add=>Instance.Started+=value;
remove=>Instance.Started-=value;
}
这样,订阅者将实际订阅实例的事件。您可以将其包装到一个方法中,然后重新激发一个事件来更改发送方
我需要使用另一个类的属性公开一个类实例的事件
你不应该这样使用事件。事件应始终作为事件公开
您可以通过自己的类公开其他类的事件:
public event EventHandler<EventArgs> SomethingHappened
{
add => Instance.Started += value;
remove => Instance.Started -= value;
}
public event EventHandler发生了一些事情
{
add=>Instance.Started+=value;
remove=>Instance.Started-=value;
}
这样,订阅者将实际订阅实例的事件。您可以将其包装为一个方法并重新激发一个事件来更改发送者事件没有getter或setter,它们只有添加和删除访问器,因此它们不能用作属性
按codeget=>Instance.Started
您试图获取Instance.Started
的值,但没有getter
您可以做的是使SomethingStarted
也成为一个事件,并覆盖add
和remove
访问器,以将值转发到实例。Started
事件:
public event EventHandler<EventArgs> SomethingStarted
{
add => Instance.Started += value;
remove => Instance.Started -= value;
}
事件没有getter或setter,它们只有add
和remove
访问器,因此它们不能用作属性
按codeget=>Instance.Started
您试图获取Instance.Started
的值,但没有getter
您可以做的是使SomethingStarted
也成为一个事件,并覆盖add
和remove
访问器,以将值转发到实例。Started
事件:
public event EventHandler<EventArgs> SomethingStarted
{
add => Instance.Started += value;
remove => Instance.Started -= value;
}
如果我想这样做,我会在我自己的类上有一个事件,当我正在包装的类上的eventhandler被调用时触发(我监听该事件,当我检测到另一个事件发生时触发我自己的事件)是的,有趣的解决方案,我没有考虑它,因为我真的被那个错误卡住了。但是“激发并重新激发一个事件”会导致性能低下吗?如果我想这样做,我会在我自己的类上有一个事件,该事件在调用我正在包装的类上的eventhandler时被激发(我监听该事件,当我检测到另一个事件发生时激发我自己的事件)是的,有趣的解决方案,我没有考虑它,因为我真的被那个错误缠住了。但“启动并重新启动一个事件”是否会导致性能低下?因此,这更多的是一个概念问题和事件的正确使用问题。非常感谢你有趣的回答,我现在更了解事件了。所以这更多的是一个概念和正确使用事件的问题。非常感谢你有趣的回答,我现在更了解事件了。谢谢你的回答。我将此标记为已接受,因为它直接回答了我有关错误的问题。谢谢您的回答。我将此标记为已接受,因为它直接回答了我关于错误的问题。