在不引用的情况下从类外部调用事件

Call event outside from class without reference

提问人:Brudi_Voeller 提问时间:6/14/2023 更新时间:6/14/2023 访问量:66

问:

我想从另一个类调用 C# ContentDialog,例如:

var myDialog = new MyDialog();
await myDialog .ShowAsync();

但我不想在课堂上引用此对话框。 稍后,我想访问该对话框以更改进程栏的状态。 我的想法是在 myDialog 中创建一个事件,该事件由构造类的方法调用。 这是否可能,或者是否有其他可能性可以完成此操作?

感谢您的帮助!

C# WPF XAML XAMARIN 事件

评论

2赞 MakePeaceGreatAgain 6/14/2023
你期望如何在没有任何对该类的引用的情况下调用类中的某个成员?你有这个参考的实际问题是什么?
0赞 lidqy 6/14/2023
您至少需要一个 DLL/EXE,即程序集的二进制形式,并将其加载到您的“AppDomain”中。然后,您可以通过 Reflection/Activator 创建实例,并将其强制转换为该实例并在其上调用WindowShowDialog
0赞 mm8 6/14/2023
稍后我想访问对话框以更改进程栏的状态好吧,那么你确实想要一个参考,不是吗?或者你对参考的定义是什么?
0赞 ToolmakerSteve 6/15/2023
1)请编辑问题以使其清晰。在某个类声明中显示该代码片段,而不是“类”,而是说出该类名或 MyDialog - 无论您指的是哪个类。2)显示与你的想法相关的任何代码。至少,显示 MyDialog 的声明,以及你所说的事件。这样,就更容易清楚地传达如何设置该事件。

答:

1赞 Felix 6/14/2023 #1

如果没有对实例或该实例的成员进行任何引用(例如,对处理事件的方法的引用),您将无法逃脱。那是因为没有办法访问你不再知道的东西。myDialog

一种解决方案可能如下(这可能是您已经想到的):

  • 创建实例。MyDialogmyDialog
  • 保存对 instace 方法的引用。这可以通过将方法添加到调用类中的事件来完成:UpdateStatusBar()myDialog
//event
public event Action NewStatusAvaliable;

//event handler assignment (without arguments)
NewStatusAvaliable += myDialog.UpdateStatusBar;
//or with arguments
NewStatusAvaliable += () => myDialog.UpdateStatusBar();
  • myDialog.ShowAsync();