2014-10-16 91 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