在C#中,您只能从基类调用事件,而不能从派生类调用:
public class Foo
{
public event ClickedHandler Clicked;
}
public class Bar : Foo
{
public void Click()
{
Clicked?.Invoke(); // CS0070 'Foo.Clicked' can only appear on the left hand side of += or -+ (except when used from within the type 'Foo')
}
}
有没有理由以这种方式设计事件/编译器?
编辑:我知道事件如何运作以及如何解决这个问题。 我感兴趣的是c#事件以这种方式设计的原因。
答案 0 :(得分:-3)
任何人都可以从你的班级派生出来。因此,如果您允许从派生类调用事件,则会引入错误的能力,因为您不知道其他人将使用它做什么。