2013-04-03 63 views
1

我有一个MainWindow和另一个名为MyClass的类的应用程序。 MyClass中有一个方法,我需要从MainWindow类访问。 MyClass在应用程序加载时加载。如何调用从主窗口中MyClass的方法,而无需创建MyClass的一个新实例:从MainWindow访问类的实例

MyClass class = new MyClass(); 

+0

你在哪里创建'MyClass'的实例? ?,你能显示代码吗? – 2013-04-03 21:49:20

+0

这也是我的怀疑。需要在MainWindow中公开我怀疑 – 2013-04-03 21:55:14

回答

2

的直截了当回答你的问题是,以纪念类方法,如静态的。这将允许你从任何地方调用它。

另一方面,这可能不是你真正需要的。因此,如果您在应用程序类中开始创建MyClass,那么您需要公开MyClass实例,例如,通过应用程序属性。看看示例代码。

public class MyClass 
{ 
    public void Method() 
    { 
     // ... 
    } 
} 

您的应用程序的代码:

public partial class App 
{ 
    public MyClass MyClassInstance { get; private set; } 

    private void Application_Startup(object sender, StartupEventArgs e) 
    { 
     MyClassInstance = new MyClass(); 
    } 
} 

和窗户的地方你打电话类的方法的代码:

public partial class MainWindow : Window 
{ 
    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     ((App)Application.Current).MyClassInstance.Method(); 
    } 
} 
+0

+1在应用程序启动过程中创建一些内容和一个'static'都可以看作全局变量,但是如果你使用'static',其他地方的'MyClass'中的任何其他方法调用都将无法执行实例状态的优点。 – 2013-04-03 22:09:47

+0

@尼克弗里曼,是的,很明显。我根据细节描述了两个不同的方法,我们从这个问题中得到了什么。 – 2013-04-03 22:12:04

+0

这就是我正在寻找的。谢谢 – Chris 2013-04-03 22:31:04

0

听起来很怀疑,但是你做你在说什么,方法是将该方法static

public partial class MainWindow 
{ 
    public void MethodInMainWindow() 
    { 
     // Don't need to create a new instance of MyClass 
     MyClass.MethodInMyClass(); 
    } 
} 

public class MyClass 
{ 
    public static void MethodInMyClass() 
    { 
     // .... 
    } 
} 

Here is a little bit of documentation on static vs instance

+1

的代码是错误的,在MethodInMyClass声明中也需要static。我编辑它,但它被拒绝。不知道为什么。 – iltzortz 2013-04-03 22:02:33

+0

@iltzotz是的,我纠正它。这是该职位最重要的部分。我不知道你的编辑为什么被拒绝。 – 2013-04-03 22:03:17