什么控制可以调用事件的位置?

Vac*_*ano 1 c# events

说我有这样一个类:

public class FauxIdentityForm
{
    public Guid FormID { get; set; }
    public event EventHandler Closed;
    public void TheObjectWasClosed(EventArgs e)
    {
        Closed(this, e);
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以在TheObjectWasClosed方法中调用Closed事件.但是,如果在不同的类中(即使在同一个文件中),我有一个这样的方法:

public void CallTheEvent()
{
    FauxIdentityForm _formIdentity = new FauxIdentityForm {FormID = Guid.NewGuid()};

    _formIdentity.Closed(_formIdentity, null);  // <-- Does not compile!
}
Run Code Online (Sandbox Code Playgroud)

对Closed的调用被编译器击落(它希望我只使用+ =和 - =).

那么,实际上是只允许在类中允许的事件?这是限制吗?

如果是这样,它周围有吗?如果没有,为什么C#的创作者会这样做?(这有时会使事件变得非常困难.我想有一个很好的理由,它可能会让我远离自己,但我想知道它.)

Jon*_*eet 5

情况很复杂 :)

您正在使用的内容称为类似字段的事件.当您在课程中声明其中一个时,您正在创建一个字段一个事件.当您"调用事件"时,您实际上正在调用该字段引用的委托.由于它是一个私有字段,您可以在类(以及任何嵌套类型)中访问它,但不能在外部访问它.

C#中的事件本身支持添加和删除操作.从外部,呼叫者只能订阅一个事件并取消订阅.他们不能提出它,或者找不到任何关于谁订阅的信息.当然,类可以提供一个引发事件的方法,但是另一个类不能访问事件的后备字段

我在一篇关于事件和代表文章中更详细地写了这篇文章.