2016-03-02 2 views
1

Когда вы передаете параметр функции, вы можете «перезаписать» этот параметр, используя ключевое слово ref. Однако это работает только до тех пор, пока функция не завершит свою работу. После этого источник параметра забывается классом.Записать значение обратно в функциональные параметры

Что я пробовал: я создал список в моем Class2, чтобы сохранить список параметров, который отправляется Class1. Затем я вношу изменения в свой список-член в Class2, но не могу определить способ обновления (resend) изменений в списке в Class1.

Class2

public ObservableCollection<Message> messages = new ObservableCollection<Message>(); 

public void ReceiveMessage(ObservableCollection<Message> list) 
{ 
    messages = list; 
} 

Внести изменения всообщений ...

//A method that writes back to list in Class1 
//You guys' answers comes here 

class1

public ObservableCollection<Message> list = new ObservableCollection<Message>(); 

Class2.ReceiveMessage(list); 

Мой вопрос: как обновить список в Class1 по методу в Class2?

+1

Как в настоящее время написано, что трудно сказать, что ваш вопрос. Просьба уточнить. –

+0

'Class2.ReceiveMessage' получает ссылку' list'. После вызова его 'list' изменяется внутри' Class1' –

+0

@NahuelIanni Я обновил сообщение с четким вопросом. – Nysithea

ответ

0

Сделайте свое messages в качестве публичной собственности, так что вы можете получить доступ к нему в любом другом классе

public class Class2 
{ 
    public ObservableCollection<Message> messages {get;set;} 

    public void ReceiveMessage(ObservableCollection<Message> list) 
    { 
     messages = list; 
    } 
} 

public class Class1 
{ 
    ... 
    ObservableCollection<Message> list = new ObservableCollection<Message>(); 

    Class2.ReceiveMessage(list); 

    var updatedList = Class2.message; 
    ... 
} 
+0

Извините, что я не понял эту часть, они уже опубликованы в моем коде. Я отредактировал его в сообщении. – Nysithea

+0

Оператор равенства (=) присваивает указатель переменной другой зоне памяти (экземпляр), поэтому вам нужно избегать этого оператора, вместо этого используйте методы .Clear(), .Add(). В противном случае вам нужно назначить переменную как мое решение. – tdat00

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