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

时间:2016-10-16 20:59:52

标签: c# class

问题本身听起来有点不高兴。要从另一个类调用非静态方法,您必须使用该类的当前实例。我试图用我想要调用第二个类的方法获取类的实例。我想我成功了但它还没有工作。

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

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小时仍然没有线索。

我现在感到愚蠢。谢谢你的帮助!

3 个答案:

答案 0 :(得分:3)

  

你必须使用班级的当前实例

您必须使用该类的 实例。不一定是现在的那个。

  

我试图获取类的实例

没有 实例(除非它是单身),有 实例。

接下来,Microsoft已将Form作为.NET框架的一部分实现。 Microsoft的Form类没有updateGrid()方法。

如果您创建了表单,那么该表单会从Form继承,并添加了方法updateGrid()。因此,不要强制转换为Form,而是将其投放到您的班级。

所以代码可能会读取

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

请注意,这不是干净的代码,因为它会破坏Liskov substitution principle。但我认为目前这不是你最关心的问题。

答案 1 :(得分:3)

Form没有updateGrid方法,但您的派生类却有。您需要将Parent转换为您的类:     MyForm frm =(MyForm)this.Parent;

答案 2 :(得分:0)

您宣布frm为普通Form

Form frm = (Form)this.Parent;

问题是Form类没有名为updateGrid的函数。当您说frm.updateGrid()时,编译器认为"好的,frmForm,但Form没有任何名为updateGrid的内容&#34 ;.它并不知道frm实际上是Form的特殊子类,并定义了updateGrid函数。

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

MyCustomForm frm = (MyCustomForm)this.Parent;

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