Я знаю, что классы ВСЕГДА передаются по ссылке иначе, чем структуры, переданные по значению.Я объявила переменную для класса и передала ее в метод для ее создания, но исходная переменная остается неизменной
Если вы посмотрите на следующий код, вы можете увидеть, что я вызываю функцию без ключевого слова ref
(предположительно, в этом нет необходимости, так как Path
- это класс, и поэтому он должен всегда автоматически вызываться ref без необходимости для ключевого слова ref
).
public MainWindow()
{
InitializeComponent();
Func(myPath);
if (myPath == null)
MessageBox.Show("AAAARGH");
}
Path myPath;
private void Func(Path p)
{
if (p == null)
p = new Path();
}
Таким образом, после вызова функции, я бы ожидать myPath
не быть null
больше, так как он был инициализирован в Func()
, но это не так.
Я работаю над глобальным значением. Это что-то меняет?
Передача по ссылке вы все еще не может изменить, где что ссылка указывает на без ref ключевое слово. Вы можете изменить свойства этого объекта, но вы не можете создать новый объект и сохранить его для вызывающего. –
это действительно плохой дизайн. Почему бы просто не использовать 'myPath' напрямую? Кроме того, что бы вы ни делали, это не относится к коду. Создайте правильный ViewModel. –
Я работаю над многолучевым холстом. Эта же функция может работать как на новых путях, так и на путях, выбранных пользователем с помощью мыши. Вот почему у меня есть myPath, который обозначает mouseSelectedPath. Это говорит, что вы правы. Я переработаю свой код, пытаясь не использовать глобальный путь. Еще одна вещь: почему бы не работать над кодом? Это довольно сложная программа, поэтому я не могу поместить все в файл xaml. – Patrick