首页 >后端开发 >C++ >在 GUI 事件处理程序中使用非静态方法时,为什么会出现'需要对象引用...”?

在 GUI 事件处理程序中使用非静态方法时,为什么会出现'需要对象引用...”?

DDD
DDD原创
2025-01-02 16:45:38482浏览

Why Do I Get

错误:“需要对象引用...”

尝试在事件处理程序内调用在 GUI 外部声明的 GUI 元素的非静态方法时类时,开发人员可能会遇到错误消息“需要对象引用才能访问非静态字段、方法或属性''..."

原因

发生此错误是因为事件处理程序需要类的实例来访问其方法和字段。默认情况下,GUI 元素需要先创建类的实例,然后才能使用它们,并且由于这些回调被定义为任何类外部的独立函数,因此它们缺少必要的对象引用。

解决方案

要解决此问题,请考虑两个选项:

  1. 将回调和变量设为静态:将回调方法声明为静态,并将类的实例变量也声明为静态。这允许直接访问这些元素,而不需要对象引用。
public static void StartClick(object obj, EventArgs args) {
    // Non-static members can be accessed directly
}
  1. 创建实例:创建类的实例并分配事件其方法的处理程序。
MainClass instance = new MainClass();
btn.Clicked += instance.StartClick;
btn_stop.Clicked += instance.StopClick;

这些选项之间的选择取决于预期的应用程序设计。出于可测试性和可维护性的考虑,全局静态变量可能是不受欢迎的。另一方面,创建一个类的多个实例可能是不必要的。了解错误消息背后的原因使软件工程师能够就可访问性和设计模式做出明智的决策。

以上是在 GUI 事件处理程序中使用非静态方法时,为什么会出现'需要对象引用...”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn