[英]How can I call a non-static method out of another class in C#?
问题本身听起来有点不合时宜。 要从另一个类调用非静态方法,您必须使用该类的当前实例。 我试图用我想调用第二个类的方法来获得该类的实例。 我认为我成功了,但仍然无法正常工作。
我尝试将实例带入第二类的这种方式:
arbeitsbearbeitung arbeitenbearbeitung = new arbeitsbearbeitung(arbeit);
arbeitenbearbeitung.Parent = this;
arbeitenbearbeitung.Show();
(属于第1类)
这是我在第二课中使用它的地方:
Form frm = (Form)this.Parent;
frm.updateGrid();
我还尝试了其他方法,例如将其作为参数传递。 同样的结果
这是类1中的updateGrid()
:
public void updateGrid()
{
klassenarbeitenTableAdapter.Fill(this.database1DataSet.Klassenarbeiten);
}
它告诉我Form不包含updateGrid
的定义。
我一定很傻,但是我找不到我的错误。
思考和谷歌搜索了2个小时,仍然没有任何线索。
我现在觉得很蠢。 谢谢您的帮助!
您必须使用该类的当前实例
您必须使用该类的实例。 不一定是当前的。
我试图获取该类的实例
没有实例 (除非它是一个单),有一个实例。
接下来,Microsoft已将Form
实施为.NET框架的一部分。 Microsoft的Form
类没有updateGrid()
方法。
如果创建了表单,则该表单将从Form
继承 ,并添加了updateGrid()
方法。 因此,与其强制转换为Form
,不如将其强制转换为您的类。
所以代码可能会读
arbeitsbearbeitung frm = (arbeitsbearbeitung) this.Parent;
frm.updateGrid();
请注意,这不是干净的代码,因为它违反了Liskov替换原则 。 但是我认为这不是您当前主要关心的问题。
Form
没有updateGrid
方法,但您的派生类updateGrid
。 您需要将Parent强制转换为您的类:MyForm frm =(MyForm)this.Parent;
您将frm
声明为纯Form
:
Form frm = (Form)this.Parent;
问题在于Form
类没有名为updateGrid
函数。 当您说frm.updateGrid()
,编译器会认为“好, frm
是Form
,但是Form
没有什么叫做updateGrid
”。 它不知道frm
实际上将是定义了updateGrid
函数的Form
的特殊子类。
相反,您需要使用类1的实际类声明frm
:
MyCustomForm frm = (MyCustomForm)this.Parent;
然后,当您执行frm.updateGrid()
,编译器将知道您在说什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.