不允许我从 class 以外的地方发起活动
Won't let me call an event from outside the class
在我的 class 我有:
public event WrDatabase.LoadStatus loadStatus;
我可以在 class 的方法中调用它。但是当我在外面时:
if (datasource.loadStatus != null)
datasource.loadStatus.Invoke(WrDatabase.TYPE.SFORCE_COLLECTION, SObjectName);
我得到:
- if语句:事件只能出现在+=或-=的左边
- Invoke 语句:我知道 Invoke() 不是 class 上的方法。
出于某种原因,我需要将其推入 class 吗?
您收到的错误消息是正确的。
event
是围绕 delegate
字段的某种语法糖,以确保它被用作 broadcaster/subscriber 模式.
从广播者 class 的外部,event
只允许使用 +=
和 -=
访问器订阅和取消订阅。 Invoke
方法不为外部所知,以确保只有广播者 class 可以调用该事件。它还确保外部世界无法清除订阅者。
如果您真的想这样做,您需要使用 delegate
而不是 event
。更改类型,您的代码应该可以工作。
作为旁注。此代码:
datasource.loadStatus(WrDatabase.TYPE.SFORCE_COLLECTION, SObjectName);
实际上确实调用了 Invoke
方法:
datasource.loadStatus.Invoke(WrDatabase.TYPE.SFORCE_COLLECTION, SObjectName);
在我的 class 我有:
public event WrDatabase.LoadStatus loadStatus;
我可以在 class 的方法中调用它。但是当我在外面时:
if (datasource.loadStatus != null)
datasource.loadStatus.Invoke(WrDatabase.TYPE.SFORCE_COLLECTION, SObjectName);
我得到:
- if语句:事件只能出现在+=或-=的左边
- Invoke 语句:我知道 Invoke() 不是 class 上的方法。
出于某种原因,我需要将其推入 class 吗?
您收到的错误消息是正确的。
event
是围绕 delegate
字段的某种语法糖,以确保它被用作 broadcaster/subscriber 模式.
从广播者 class 的外部,event
只允许使用 +=
和 -=
访问器订阅和取消订阅。 Invoke
方法不为外部所知,以确保只有广播者 class 可以调用该事件。它还确保外部世界无法清除订阅者。
如果您真的想这样做,您需要使用 delegate
而不是 event
。更改类型,您的代码应该可以工作。
作为旁注。此代码:
datasource.loadStatus(WrDatabase.TYPE.SFORCE_COLLECTION, SObjectName);
实际上确实调用了 Invoke
方法:
datasource.loadStatus.Invoke(WrDatabase.TYPE.SFORCE_COLLECTION, SObjectName);