2015-03-18 19 views
3

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

Итак, скажем, у меня есть список, это называется GunList.

List<string> GunList = new List<string>(); 

И так как я знаю, что C# является языком ООП, как лучше всего получить доступ к этому списку в разных классах? Нехорошо создавать публичные статические классы?

+3

Под «общественных статических классов» вы на самом деле означает «общественные статические переменные»? –

+0

Неплохо, чтобы вещи были общедоступными и статичными, которые не должны быть, если это то, что вы просите, очень широкие, чтобы дать конкретный ответ, хотя – Sayse

+0

Сначала вам нужно сначала прояснить некоторые вещи в своем классе: сколько экземпляров существуют ли эти классы и в каком отношении они? Имеет ли какой-либо экземпляр свой собственный список? – HimBromBeere

ответ

5

Правильный ответ будет зависеть от вашего дизайна OO. Не просто подумайте о GunList, но о том, какие объекты будут взаимодействовать с ним, их множественность (один или многие) и кто может «владеть» GunList и т. Д.

Если вы хорошо структурируете свой дизайн OO, для вашего GunList должен стать очевидным. Скорее всего, вы обнаружите, что вы захотите определить его в классе (т. Е. Не глобально статически) и передать его в ограниченное число других объектов. Таким образом, вы будете минимизировать «воздействие» на GunList для других классов/экземпляров (что хорошо)

+0

это плохо, если у меня есть открытый статический класс под названием «globalvars», и все мои переменные устанавливаются и принимаются в нем? – user3841476

+0

Этот подход поражает весь смысл программирования OO по причинам, которые я уже сказал. Технически это возможно, но оно не масштабируемо, и вы можете получить просто большой беспорядок глобально доступных объектов, который становится все труднее и труднее поддерживать. –

1

Это обычно не является «ООП» вещь, чтобы использовать глобальную статическую переменную, но иногда полезно

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

Шаблон проектирования Singleton описывает совместную обработку этих данных.

По существу у вас есть класс для GunList, который имеет статический метод доступа к единственной копии этого списка, который используется в глазу.

class GunList 
{ 
    private satic GunList _GunList = new GunList(); 
    public static GunList Guns 
    { 
     get { return _GunList; } 
    } 
    private List<string> gunList = new List<string>(); 
    private GunList() 
    { 
     // Initialize here 
    } 

} 

Доступ его с помощью

GunList.Guns 

Или обеспечивают функции доступа или свойства по мере необходимости.

https://msdn.microsoft.com/en-us/library/ff650316.aspx

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