Это происходит потому, что DoActions
является статическим методом, а не методом экземпляра, однако MainForm
является полем / свойством экземпляра.Различие состоит в том, что методы экземпляра работают с экземпляром класса, в котором они определены, тогда как статические методы этого не делают.
Это означает, что методы экземпляра могут получить доступ к свойствам, полям и методам их содержащего класса.через ключевое слово this
, например:
// Instance field
Form1 MainForm;
void InstanceMethod()
{
Form1 frm = this.MainForm;
}
Вы не можете сделать то же самое из статического метода (подумайте, на каком экземпляре он будет работать?).Обратите внимание, что C # будет неявно предполагать использование ключевого слова this
в тех местах, где оно имеет смысл (поэтому приведенный выше пример мог бы быть записан как Form1 frm = MainForm
).
См. C # Статические методы для альтернативного объяснения методов static против экземпляра (это важная концепция в объектно-ориентированном программировании, которую вы должны уделить время для правильного понимания).
В вашем примере вы , вероятно, хотитезамените DoActions
на метод экземпляра (удалив статическое объявление):
public void DoActions(string Cmd)
{
if(Cmd == true)
{
this.MainForm.Visible = false;
}
}
Это позволит ему получить доступ к полю / свойству экземпляра MainForm
, однако это может вызвать проблемы в другом месте вашего кода вместа, где вы пытаетесь вызвать DoActions
из другого статического метода без предоставления экземпляра объекта.