.net - 不允许我从课堂外调用事件
问题描述
在我的课堂上,我有:
public event WrDatabase.LoadStatus loadStatus;
我可以在类的方法中调用它。但是当我有时从外面:
if (datasource.loadStatus != null)
datasource.loadStatus.Invoke(WrDatabase.TYPE.SFORCE_COLLECTION, SObjectName);
我得到:
- if 语句:事件只能出现在 += 或 -= 的左侧
- 调用语句:我知道 Invoke() 不是该类的方法。
出于某种原因,我是否需要将其推送到课堂上?
解决方案
您收到的错误消息是正确的。
Anevent
是围绕字段的某种语法糖delegate
,以确保将其用作广播者/订阅者模式。
从广播类的外部,an只允许使用和访问者event
订阅和取消订阅它。该方法从外部未知,以确保只有广播类可以调用事件。它还确保外部世界无法清除订阅者。+=
-=
Invoke
如果你真的想这样做,你需要使用 adelegate
而不是event
. 更改类型,您的代码应该可以工作。
作为旁注。这段代码:
datasource.loadStatus(WrDatabase.TYPE.SFORCE_COLLECTION, SObjectName);
实际上确实调用了该Invoke
方法:
datasource.loadStatus.Invoke(WrDatabase.TYPE.SFORCE_COLLECTION, SObjectName);
推荐阅读
- python-3.x - 如何对 QComboBox 中的文本执行字母间距?
- java - spring.profiles.active 在 springboot 应用程序中不起作用
- python - 如何将Mac上finder中的文件夹导入python
- python - 如何使用纯 REST 服务发出 Amazon S3 和 SFTP 请求?
- python - Python Kivy 保持文本更新(刷新)
- python - pandas DataFrame 样式丢失表格边框
- node.js - 将 createPages 与用户身份验证和静态内容一起使用
- python - 识别熊猫数据框中的耦合行
- sql - Microsoft SQL Server 中的 SQL 创建表错误问题
- big-o - 初始化非零时如何计算for循环的原始比较操作?