Как я могу ссылаться на метод из другого класса, не создавая его экземпляры? - PullRequest
2 голосов
/ 23 октября 2009

Я не хочу создавать объект, потому что это не повлияет на мою видимую форму. Как я могу вызвать метод, чтобы он делал свое дело в видимой части вещей.

public class foo
{
   public void SetString(string foo)
   {
       label1.Text = foo;
   }
}

Внутри другого класса:

foo X = new foo();
X.SetString("testlololol");

Это установит метку, но Виртуально, я не смогу увидеть ее в своей форме.

Как я могу сделать то же самое, но на моей ВИДИМОЙ стороне вещей?

Ответы [ 4 ]

3 голосов
/ 23 октября 2009

Когда вы создаете видимую форму, сохраняйте ссылки на нее в некотором статическом свойстве. Тогда другие классы могут использовать это свойство для запуска открытых методов этого класса.

// the original form
class MyForm()
{
     // form public method
     public void MyMethod() { ... }
}

// class storing the reference to a form
class MyOtherClass
{     
    public static Form MyForm;

    public void ShowForm()
    {
        MyForm = new MyForm();
        MyForm.Show();
    }
}

// invoke form public method in this class
class YetAnotherClass
{
    public void SomeMethod ()
    {
        MyOtherClass.MyForm.MyMethod();
    }
}
1 голос
/ 23 октября 2009

Вам нужно как-то получить экземпляр, который является видимым. Проработайте некоторый информационный путь от вещей, которые уже знают о вашей форме (или что бы то ни было) к вашему другому коду. Подумайте, что случилось бы, если бы было две видимые формы - какую бы вы хотели? Это должно предложить путь вперед. Если вы точно знаете, что будет только один видимый экземпляр, вы могли бы использовать синглтон - но я настоятельно рекомендую вам этого не делать.

Имейте в виду, что вам может не потребоваться знать его по полному имени типа - если это пересекающиеся слои, вы можете захотеть разработать некоторый интерфейс, включая действие, абстрактным способом.

0 голосов
/ 23 октября 2009

Обычно я передаю ссылку на мою форму (в данном случае 'foo') другому классу. Или я бы сохранил копию 'foo' в каком-то статическом месте. Если вы знаете, что когда-либо будет только 1 экземпляр 'foo', вы можете сделать что-то вроде:

public class foo
{
   public static foo Current { get; private set; }

   public foo()
   {
       foo.Current = this;
   }

   public void SetString(string foo)
   {
       label1.Text = foo;
   }
}

... и ...

foo.Current.SetString("testlololol");

Хотя это немного хакерская IMO и не поддерживает несколько экземпляров 'foo'.

0 голосов
/ 23 октября 2009

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

public class OtherClass{
  foo myFoo;

  public OtherClass( foo visibleFoo )
  {
     myFoo = visibleFoo;
  }

  public void method()
  {
     myFoo.SetString("testlolol");
  }

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...