[英]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.