2009-10-23 98 views
0

我不想創建一個對象,因爲它不會影響我的可見形式。我怎樣才能調用一個方法,使其在事物可見的一面發揮作用。如何在不實例化的情況下引用另一個類的方法?

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

內的另一個類:

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

這將設置的標籤,但是事實上,我將無法看到它的窗體上。

我該怎麼做同樣的事情,但在我的可見一面呢?

回答

1

當您創建可見的形式儲存在一些靜態屬性,它引用。然後其他類可以使用該屬性來運行該類的公共方法。

// 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

你需要以某種方式得到可見的實例。從已經瞭解你的表單(或者其他任何代碼)的東西中找出一些信息路徑。考慮一下如果有兩種可見的形式會發生什麼 - 你想要哪一種?這應該提出一條前進的道路。如果您知道只有一個可見的實例,您可以使用單身 - 但我強烈建議您不要。

請記住,您可能不需要知道它的完整類型名稱 - 如果這是交叉圖層,則可能需要制定一些界面,包括採取某種抽象方式的操作。

+0

我不太明白。我如何獲得可見的東西? :S – 2009-10-23 15:06:28

+1

@ Papuccino1:嗯,我假設你已經*得到了*可見的東西,對吧?如果不是,我不明白這個問題。如果是這樣,你需要以某種方式將該引用傳遞給需要它的代碼。 – 2009-10-23 15:18:12

0

您的第二個類需要引用可見類的實例。

public class OtherClass{ 
    foo myFoo; 

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

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

}

0

我通常會將我的表單(本例中爲'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'的多個實例。

相關問題