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,它们只有
添加
删除
访问器,因此它们不能用作属性

按code
get=>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
访问器,因此它们不能用作属性

按code
get=>Instance.Started
您试图获取
Instance.Started
的值,但没有getter

您可以做的是使
SomethingStarted
也成为一个事件,并覆盖
add
remove
访问器,以将值转发到
实例。Started
事件:

public event EventHandler<EventArgs> SomethingStarted
{
    add => Instance.Started += value;
    remove => Instance.Started -= value;
}

如果我想这样做,我会在我自己的类上有一个事件,当我正在包装的类上的eventhandler被调用时触发(我监听该事件,当我检测到另一个事件发生时触发我自己的事件)是的,有趣的解决方案,我没有考虑它,因为我真的被那个错误卡住了。但是“激发并重新激发一个事件”会导致性能低下吗?如果我想这样做,我会在我自己的类上有一个事件,该事件在调用我正在包装的类上的eventhandler时被激发(我监听该事件,当我检测到另一个事件发生时激发我自己的事件)是的,有趣的解决方案,我没有考虑它,因为我真的被那个错误缠住了。但“启动并重新启动一个事件”是否会导致性能低下?因此,这更多的是一个概念问题和事件的正确使用问题。非常感谢你有趣的回答,我现在更了解事件了。所以这更多的是一个概念和正确使用事件的问题。非常感谢你有趣的回答,我现在更了解事件了。谢谢你的回答。我将此标记为已接受,因为它直接回答了我有关错误的问题。谢谢您的回答。我将此标记为已接受,因为它直接回答了我关于错误的问题。