如何从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个小时,还是没有头绪。
我现在觉得自己很笨。谢谢你的帮助!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()
时,编译器认为"好吧,frm
是Form
,但是Form
没有任何叫做updateGrid
的东西"。它不知道frm
实际上是Form
的特殊子类,并定义了updateGrid
函数。
frm
:
MyCustomForm frm = (MyCustomForm)this.Parent;
当你执行frm.updateGrid()
时,编译器会知道你在说什么。