Как я могу вызвать нестатический метод из другого класса в C #?

Сам вопрос звучит немного nooby. Чтобы вызвать нестационарный метод из другого класса, вы должны использовать текущий экземпляр класса. Я попытался получить экземпляр класса с помощью метода, который я хочу вызвать во второй класс. Я думаю, что мне удалось, но он пока не работает.

Это один из способов, как я попытался привести экземпляр к второму классу:

arbeitsbearbeitung arbeitenbearbeitung = new arbeitsbearbeitung(arbeit);
arbeitenbearbeitung.Parent = this;
arbeitenbearbeitung.Show();

(из класса 1)

И вот где я использовал его в классе 2:

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

Я также пробовал его разными способами, например, передавать его в качестве параметра; тот же результат ...

Это updateGrid()в классе 1:

public void updateGrid()
{
    klassenarbeitenTableAdapter.Fill(this.database1DataSet.Klassenarbeiten);
}

Он сообщает мне, что updateGrid не содержит определения Form.

Я, должно быть, тупой, но я не могу найти свою ошибку.

Мышление и поиск в Интернете в течение 2 часов и до сих пор нет подсказки.

Теперь я чувствую себя немой. Спасибо за помощь!

c#,class,

-1

Ответов: 3


3 принят

updateGridне имеет Formметода, но ваш производный класс делает. Вам нужно передать родителя в свой класс: MyForm updateGrid () = (MyForm) this.Parent;


3

вы должны использовать текущий экземпляр класса

Вы должны использовать в экземпляр класса. Не обязательно текущий.

Я попытался получить экземпляр класса

Существует не экземпляр (если это не одноэлементно), есть экземпляр.

Затем Microsoft реализована updateGrid()как часть платформы .NET. FormКласс Microsoft не имеет метода.arbeitsbearbeitung frm = (arbeitsbearbeitung) this.Parent; frm.updateGrid();

Если вы создали FRM, то , что форма наследует от и вы добавили метод . Поэтому вместо того, чтобы бросать , примените его к вашему классу.Form frm = (Form)this.Parent;FormupdateGrid

Таким образом, код может читать

frm.updateGrid()

Обратите внимание, что это не чистый код, так как он нарушает принцип замены Лискова . Но я думаю, что это не ваша главная забота на данный момент.


0

Вы объявляете frmравным Form:

Form

Проблема в том, что Formкласс не имеет функции Form. Когда вы говорите updateGrid, компилятор думает «ОК, frmесть Form, но Formне имеет ничего, что называется Form». Он не знает, что updateGridэто будет ваш специальный подкласс Formс frmопределенной функцией.

Вместо этого вам нужно объявить frmс фактическим классом класса 1:

MyCustomForm frm = (MyCustomForm)this.Parent;

Затем, когда вы это сделаете frm.updateGrid(), компилятор узнает, о чем вы говорите.

C #, класс,
Похожие вопросы