首页 > 解决方案 > 不允许我从课堂外调用事件

问题描述

在我的课堂上,我有:

public event WrDatabase.LoadStatus loadStatus;

我可以在类的方法中调用它。但是当我有时从外面:

if (datasource.loadStatus != null)
    datasource.loadStatus.Invoke(WrDatabase.TYPE.SFORCE_COLLECTION, SObjectName);

我得到:

出于某种原因,我是否需要将其推送到课堂上?

标签: .neteventsdelegates

解决方案


您收到的错误消息是正确的。

Anevent是围绕字段的某种语法糖delegate,以确保将其用作广播者/订阅者模式

从广播类的外部,an只允许使用和访问者event订阅和取消订阅它。该方法从外部未知,以确保只有广播类可以调用事件。它还确保外部世界无法清除订阅者。+=-=Invoke

如果你真的想这样做,你需要使用 adelegate而不是event. 更改类型,您的代码应该可以工作。

作为旁注。这段代码:

datasource.loadStatus(WrDatabase.TYPE.SFORCE_COLLECTION, SObjectName);

实际上确实调用了该Invoke方法:

datasource.loadStatus.Invoke(WrDatabase.TYPE.SFORCE_COLLECTION, SObjectName);

推荐阅读