繁体   English   中英

如何在C#中的另一个类之外调用非静态方法?

[英]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() ,编译器会认为“好, frmForm ,但是Form没有什么叫做updateGrid ”。 它不知道frm实际上将是定义了updateGrid函数的Form的特殊子类。

相反,您需要使用类1的实际类声明frm

MyCustomForm frm = (MyCustomForm)this.Parent;

然后,当您执行frm.updateGrid() ,编译器将知道您在说什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM