2014-10-16 87 views
-1

如何從靜態方法訪問類的當前實例?靜態方法是必要的。我只想獲得父窗體的當前子窗體的數量。我的代碼如下,但它說,「應用程序」不會在目前情況下如何從靜態方法訪問類的實例?

private static ReturnOpenWindowCount() 
    { 
     Form f = (Form)Application.OpenForms["Form1"] 
     if(f.Children.Length > 0){//Do Something;} 
    } 
+1

什麼是'應用程序'在你的代碼?一個'System.Windows.Forms.Application'?如果是這樣,你只是缺少'使用System.Windows.Forms;'。 – Dmitry 2014-10-16 21:23:14

+0

我們需要比您在此提供的更多細節。我傾向於同意德米特里;你只是缺少'using'語句。 – 2014-10-16 21:31:48

+0

你有沒有運氣讓這個工作? – RadioSpace 2014-10-18 17:04:40

回答

1

你不能,一個靜態方法沒有「當前實例」存在。當有100個實例或0時,您可以調用靜態方法,並且在兩種情況下都可以工作。它與任何實例都沒有關係,除非您明確地創建一個實例,例如通過保留一個私有的實例化形式的靜態數組。這很可能是不好的風格和XY solution雖然在形式的關係。

1

Youc可以在參數Application實例傳遞給該方法

+0

我不認爲這有效。 Application上的大多數方法都是'static',因此它們在代碼中被引用時不會暴露在方法參數中。在Visual Studio中檢查它。 'OpenForms'是一個靜態的'FormCollection'屬性,並且在Intellisense中也不會顯示'Application'類型的參數。 – 2014-10-16 21:24:10

0

通過實例作爲參數。這就是儘可能接近你..

void Main() 
{ 
Foo foo = new Foo(); 

Foo.ThisFoo(foo); 

Console.WriteLine(foo); 

Console.ReadLine(); 

} 

// Define other methods and classes here 
class Foo 
{ 

int x = 0; 

public static void ThisFoo(Foo foo) 
{ 
    foo.x = 1; 
} 

public override string ToString() 
{ 
    return "" + x; 
} 
} 
+0

該死的。兩個人已經說過了。 – 2014-10-16 21:23:45

+0

@RobertHarvey但我表明你可以訪問私人領域 – RadioSpace 2014-10-16 21:28:04