如何从静态方法访问类的当前实例?静态方法是必要的。我只想获得父窗体的当前子窗体的数量。我的代码如下,但它说,“应用程序”不会在目前情况下如何从静态方法访问类的实例?
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