如何在不实例化的情况下从另一个类引用方法?

时间:2009-10-23 14:49:07

标签: c# winforms forms class

我不想创建一个对象,因为它不会影响我的可见形式。我怎样才能调用一个方法,以便它在事物的可见方面发挥作用。

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

在另一个班级里面:

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

这会设置标签,但是很可能,我将无法在表单上看到它。

我怎么能做同样的事情,但在我可见的方面呢?

4 个答案:

答案 0 :(得分:3)

创建可见表单时,在某些静态属性中存储对它的引用。然后其他类可以使用该属性来运行该类的公共方法。

// 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 :(得分:1)

您需要以某种方式获取 可见的实例。从已经了解您的表单(或其他任何内容)到其他代码的内容中找出一些信息路径。考虑如果有两种可见形式会发生什么 - 你想要哪一种?这应该是一条前进的道路。如果你知道只有一个可见的实例,你可以使用一个单例 - 但我强烈建议你不要。

请记住,您可能不需要通过其完整的类型名称来了解它 - 如果这是跨越图层,您可能希望以某种抽象的方式计算出某些界面,包括该动作。

答案 2 :(得分:0)

您的第二个类需要引用可见的类的实例。

public class OtherClass{
  foo myFoo;

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

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

}

答案 3 :(得分:0)

我通常会将表单的引用(在本例中为'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");

虽然这有点hacky IMO,并且不支持'foo'的多个实例。