2013-04-03 6 views
1

У меня есть приложение с MainWindow и другим классом MyClass. У MyClass есть метод, в котором мне нужен доступ из класса MainWindow. MyClass загружается, когда приложение загружается. Как вызвать метод в MyClass из MainWindow, не создавая новый экземпляр MyClass:Доступ к экземпляру класса из MainWindow

MyClass class = new MyClass(); 

?

+0

Где вы создаете экземпляр 'MyClass'? ?, можете ли вы показать код? –

+0

Это тоже мое подозрение. Нужно быть общедоступным в MainWindow. Я подозреваю, что –

ответ

2

Прямой вперед ответ на ваш вопрос, чтобы пометить метод класса как статический. Это позволит вам позвонить ему из любого места.

С другой стороны, это, вероятно, не то, что вам действительно нужно. Таким образом, если вы создаете MyClass при запуске приложения внутри класса Application, то вам нужно предоставить экземпляр 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 в другом месте не сможет принять преимущество состояния экземпляра. –

+0

@NickFreeman, да, это очевидно. Я описал два отдельных подхода в соответствии с деталями, которые мы имеем от вопроса. –

+0

Это то, что я искал. благодаря – Chris

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. Я отредактировал его, но он был отклонен. не знаю почему. – iltzortz

+0

@iltzotz Да, я исправил его. Это была самая важная часть поста. Я не знаю, почему ваше изменение было отклонено. –

Смежные вопросы