簡體   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