如何在不实例化的情况下引用另一个类的方法?
问题描述:
我不想创建一个对象,因为它不会影响我的可见形式。我怎样才能调用一个方法,使其在事物可见的一面发挥作用。如何在不实例化的情况下引用另一个类的方法?
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();
}
}
答
你需要以某种方式得到是可见的实例。从已经了解你的表单(或者其他任何代码)的东西中找出一些信息路径。考虑一下如果有两种可见的形式会发生什么 - 你想要哪一种?这应该提出一条前进的道路。如果您知道只有一个可见的实例,您可以使用单身 - 但我强烈建议您不要。
请记住,您可能不需要知道它的完整类型名称 - 如果这是交叉图层,则可能需要制定一些界面,包括采取某种抽象方式的操作。
答
您的第二个类需要引用可见类的实例。
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'的多个实例。
我不太明白。我如何获得可见的东西? :S – 2009-10-23 15:06:28
@ Papuccino1:嗯,我假设你已经*得到了*可见的东西,对吧?如果不是,我不明白这个问题。如果是这样,你需要以某种方式将该引用传递给需要它的代码。 – 2009-10-23 15:18:12