如何从c#中的另一个类调用非静态方法?

本文关键字:调用 静态方法 另一个 | 更新日期: 2023-09-27 18:13:14

这个问题本身听起来有点奇怪。要从另一个类调用非静态方法,必须使用类的当前实例。我试图用我想调用第二个类的方法获得类的实例。我想我成功了,但它仍然不起作用。

这是我试图将实例带入第二个类的一种方式:

arbeitsbearbeitung arbeitenbearbeitung = new arbeitsbearbeitung(arbeit);
arbeitenbearbeitung.Parent = this;
arbeitenbearbeitung.Show();

(非1类)

这是我在第2课中使用它的地方:

Form frm = (Form)this.Parent;
frm.updateGrid();

我也尝试了不同的方式,如传递它作为参数;相同的结果…

这是第1类的updateGrid():

public void updateGrid()
{
    klassenarbeitenTableAdapter.Fill(this.database1DataSet.Klassenarbeiten);
}

它告诉我Form不包含updateGrid的定义。

我一定是笨,但我找不到我的错误。

我想了2个小时,还是没有头绪。

我现在觉得自己很笨。谢谢你的帮助!

如何从c#中的另一个类调用非静态方法?

Form没有updateGrid方法,但是您的派生类有。你需要将Parent转换为你的类:

必须使用类

的当前实例

必须使用类的实例。不一定是当前的

我试图获得类的实例

不存在实例(除非它是单例),存在实例。

接下来,微软将Form作为。net框架的一部分实现。微软的Form类没有updateGrid()方法。

如果您创建了一个表单,那么该表单继承了Form,并且您添加了updateGrid()方法。因此,不是强制转换为Form,而是强制转换为您的类。

所以代码可能读作

arbeitsbearbeitung frm = (arbeitsbearbeitung) this.Parent;
frm.updateGrid();
请注意,这不是干净的代码,因为它违反了Liskov替换原则。但我认为这不是你目前最关心的。

您将frm声明为普通Form:

Form frm = (Form)this.Parent;

问题是Form类没有称为updateGrid的函数。当你说frm.updateGrid()时,编译器认为"好吧,frmForm,但是Form没有任何叫做updateGrid的东西"。它不知道frm实际上是Form的特殊子类,并定义了updateGrid函数。

相反,您需要使用class 1的实际类来声明frm:
MyCustomForm frm = (MyCustomForm)this.Parent;

当你执行frm.updateGrid()时,编译器会知道你在说什么。