如何從靜態方法訪問類的當前實例?靜態方法是必要的。我只想獲得父窗體的當前子窗體的數量。我的代碼如下,但它說,「應用程序」不會在目前情況下如何從靜態方法訪問類的實例?
private static ReturnOpenWindowCount()
{
Form f = (Form)Application.OpenForms["Form1"]
if(f.Children.Length > 0){//Do Something;}
}
如何從靜態方法訪問類的當前實例?靜態方法是必要的。我只想獲得父窗體的當前子窗體的數量。我的代碼如下,但它說,「應用程序」不會在目前情況下如何從靜態方法訪問類的實例?
private static ReturnOpenWindowCount()
{
Form f = (Form)Application.OpenForms["Form1"]
if(f.Children.Length > 0){//Do Something;}
}
你不能,一個靜態方法沒有「當前實例」存在。當有100個實例或0時,您可以調用靜態方法,並且在兩種情況下都可以工作。它與任何實例都沒有關係,除非您明確地創建一個實例,例如通過保留一個私有的實例化形式的靜態數組。這很可能是不好的風格和XY solution雖然在形式的關係。
Youc可以在參數Application
實例傳遞給該方法
我不認爲這有效。 Application上的大多數方法都是'static',因此它們在代碼中被引用時不會暴露在方法參數中。在Visual Studio中檢查它。 'OpenForms'是一個靜態的'FormCollection'屬性,並且在Intellisense中也不會顯示'Application'類型的參數。 – 2014-10-16 21:24:10
通過實例作爲參數。這就是儘可能接近你..
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;
}
}
該死的。兩個人已經說過了。 – 2014-10-16 21:23:45
@RobertHarvey但我表明你可以訪問私人領域 – RadioSpace 2014-10-16 21:28:04
什麼是'應用程序'在你的代碼?一個'System.Windows.Forms.Application'?如果是這樣,你只是缺少'使用System.Windows.Forms;'。 – Dmitry 2014-10-16 21:23:14
我們需要比您在此提供的更多細節。我傾向於同意德米特里;你只是缺少'using'語句。 – 2014-10-16 21:31:48
你有沒有運氣讓這個工作? – RadioSpace 2014-10-18 17:04:40