2013-04-03 105 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