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

问题描述:

我不想创建一个对象,因为它不会影响我的可见形式。我怎样才能调用一个方法,使其在事物可见的一面发挥作用。如何在不实例化的情况下引用另一个类的方法?

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

内的另一个类:

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

这将设置的标签,但是事实上,我将无法看到它的窗体上。

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

当您创建可见的形式储存在一些静态属性,它引用。然后其他类可以使用该属性来运行该类的公共方法。

// 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(); 
    } 
} 

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

请记住,您可能不需要知道它的完整类型名称 - 如果这是交叉图层,则可能需要制定一些界面,包括采取某种抽象方式的操作。

+0

我不太明白。我如何获得可见的东西? :S – 2009-10-23 15:06:28

+1

@ Papuccino1:嗯,我假设你已经*得到了*可见的东西,对吧?如果不是,我不明白这个问题。如果是这样,你需要以某种方式将该引用传递给需要它的代码。 – 2009-10-23 15:18:12

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

public class OtherClass{ 
    foo myFoo; 

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

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

}

我通常会将我的表单(本例中为'foo')的引用传递给另一个类。或者我会将“foo”的副本存储到某个静态位置。如果你知道会有永远只能是“富”的1个实例,你可以这样做:

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'的多个实例。