2013-12-10 2 views
2

Я новичок в C#. Приходите из среды C/C++. Мое приложение имеет List<Model>, который требуется повсеместно, разными классами. Проблема заключается в том, что копия не будет делать, потому что это заявление:Что такое эквивалент глобальной переменной C/C++?

dataGrid.ItemsSource = myModelList; 

требует оригинала по адресу. Я попытался изменить некоторые аргументы и передать эту переменную как ref, но как только ей присваивается знак равенства, я получаю копию. Верный?

+2

XY проблема. 1 - В C# нет «глобальных переменных» (в строгом смысле слова). 2 - Вы не должны возиться с 'ref' и тому подобное. 3 - 'var a = someotherlist;' делает 'a' равным' someotherlist' BY Reference по умолчанию. В чем проблема, с которой вы столкнулись? –

+1

Нет, у вас нет копии. Знак равенства копирует ссылку для ссылочных типов, включая «Список ». – McGarnagle

+0

Я должен спешить добавить, что есть резьба посередине !!

ответ

1

Вы можете создать для него открытый класс с открытым статическим списком внутри него. Тот, который вы тогда можете получить повсюду.

например

public class FakeGlobal 
{ 
    public static List<Model> MyModelList = new List<Model>(); 
} 

или даже сделать его свойство с геттер/сеттер.

+0

О, мне это не нравится, по крайней мере, накладывает на него сеттер ... –

+0

Это не так, даже не обязательно. Плохо, имея глобальную переменную, ту, которую любой «дурак» может изменить в любой момент и не знать, что они сделали что-то потенциально ужасное, просто просят об этом. –

+0

про сеттер/геттер ... Я сказал, что уже в нижней части ответа. Но это зависит от разработчика. –

1

Создайте открытый класс и получите контент, который вы хотите передать объявленному static внутри класса. Тогда просто получить доступ к нему, как NameOfClass.NameOfMethod()

public class NameOfClass 
{ 
    public static RETURNTYPE NameOfMethod() 
    { 
     // Your Code 
    } 
} 
+0

Является ли этот поток безопасным? Где находится «Список »? Между двумя общественными организациями? –

2

Вы можете сделать это одноэлементно. Однако конкретный список, необходимый повсюду, заставил бы меня серьезно подумать о моем дизайне.

По крайней мере, вы должны подумать о том, чтобы написать класс для контроля доступа к списку (добавить, удалить, очистить и т. Д.) И сделать это «глобальным», иначе вы будете глубоко в коричневом материале, пока он попадает в вентилятор.

+0

Тони, в чем преимущество использования синглтона в этом случае над классом со статическими членами? –

+0

Вы можете сделать больше с одним, и это демонстрирует особое намерение, но я не знаю, лучше ли в этом случае. Я просто разместил его как вариант, как никто другой в то время, и не было достаточной информации, предоставленной OP, чтобы выбрать один над другим. Это, безусловно, не решает всех проблем, которые хотят сделать что-то глобальное. –

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