2012-01-04 14 views
5

Nie można znaleźć żadnych informacji dotyczących tego pytania. Próbuję utworzyć globalną tablicę w języku C#, aby móc wprowadzać do niej informacje w różnych punktach kodu, a następnie wywoływać te informacje później, aby ją wyświetlić. Na przykład, chcę podjąć następujące informacje i umieścić go na tablicy:Deklarowanie i używanie globalnych tablic C#

string auctionID; 
string itemName; 
string itemID; 
string bid; 
string buyout; 
string quantity; 

Następnie chcę, aby móc nazwać tę tablicę z pętli for, lub coś podobnego, tak, że można wyświetlić tę informację w późniejszym terminie. Teraz jedną małą rzeczą, o której zapomniałem wspomnieć, jest to, że prawdopodobnie potrzebuję albo tablicy tablic albo tablicy wielowymiarowej. Powodem tego jest fakt, że zamierzam mieć wiele różnych aukcji i danych o każdej aukcji (stąd powyższe zmienne) i chcę wyświetlać te informacje na samym końcu programu. Dziękuję za Twój czas!

Update 1

Tak, myślę, że nie robię się jasno, bo jestem coraz mylić, ale to może być również dlatego, że jestem trochę sfrustrowany w tej chwili z tego programu. Chcę być w stanie utworzyć globalną tablicę, a następnie uzyskać & ustawić informacje przechowywane w tej tablicy z różnymi funkcjami w moim programie, ponieważ różne funkcje będą modyfikować różne części tej tablicy. Poza tym nie miałbym nic przeciwko korzystaniu z pamięci podręcznej, gdybym zrozumiał, jak to działało, lub nawet miał link do przeczytania o tym. Ostatnia rzecz, którą mogę dodać, robię to na Windows Phone 7, więc ograniczam się do jakich bibliotek i wywołań systemowych mogę użyć.

Aktualizacja 2

jestem trochę zardzewiały na OOP, więc mam zamiar iść przeczytać więcej na niej (dzięki czynienia tonę z HTML i nie bardzo ma szansę zrobić prawdziwe programowanie). Dzięki za sugestie wszystkich. Prawdopodobnie opublikuję ten temat, jeśli nie będę mógł dowiedzieć się czegoś więcej. Twoje zdrowie!

+1

Nie, nie rób tego. Obecnie nie korzystamy z globalnych tablic. – Richard

+0

Korzystanie z buforowania byłoby lepszym pomysłem niż globalne tablice, ponieważ prawdopodobnie napotkasz problemy z współbieżnością i wielowątkowością. – Kane

+0

"Nie wiem, jak wywołać tę samą tablicę za każdym razem, gdy wykonuję osobne wywołania do tablicy, ponieważ z tego co rozumiem, C# traktuje tablice jako obiekty." To nie ma sensu. Jak myślisz, dlaczego tablice będące obiektami oznaczają, że nie otrzymasz "tej samej tablicy za każdym razem"? –

Odpowiedz

7

zmienne globalne są prawie zawsze złym pomysłem, więc C# umożliwia tworzenie im trudną rzeczą do zrobienia. Jednakże, jeśli naprawdę chcesz, możesz zrobić coś takiego:

public static class GlobalData 
{ 
    public static string[] Foo = new string[16]; 
}; 

// From anywhere in your code... 
Console.WriteLine(GlobalData.Foo[7]); 

jednak pamiętać, że tak długo, jak są zmuszeni do tworzenia statycznych klasy, aby to zrobić, to dlaczego nie iść dalej i sprawić, że rzeczywiste tablica zmienna prywatna, zamiast publiczna, a następnie dodać statyczne, publiczne metody pobierające i ustawiające? Takie podejście przynajmniej usuwa pewne niebezpieczeństwo związane z globalnymi zmiennymi.

1
string[] values; 

Albo zadeklarować jeden konkretnej długości:

string[] values = new string[6]; // creates an array with a length of 6. 
+0

Och, rozumiem to. Problem polega na tym, że nie wiem, co zrobić z tym, gdzie je umieścić, aby różne metody mogły wywoływać tę tablicę i wykorzystywać informacje w niej zawarte. – th3n3wguy

+0

Technicznie poprawne, ale tak naprawdę nie odpowiada na pytanie IMHO. –

+0

@thenewguy Przeczytaj więcej o programowaniu obiektowym i wzorach projektowych. Nadal myślisz w sposób inny niż OOP. –

2

Cóż, pomijając fakt, że najprawdopodobniej masz problem strukturalny jeśli przechowywania rzeczy globalnie.

Do tego celu można użyć właściwości statycznej.

public class MyVariables 
{ 
    private static string[] _MyStuff 
    public static string[] MyStuff 
    { 
      return _MyStuff; 
    } 
} 

Wtedy dostęp do niego tak:

MyVariables.MyStuff[0] 
+0

Możesz również zadeklarować samą klasę jako statyczną ('public Static MyVariables'), choć nie jest to bardzo ważne - po prostu uniemożliwi użytkownikom bezsensowne tworzenie instancji obiektu. – MusiGenesis

4

W języku C# nie ma zmienne globalne. Są tylko członkowie klasy. Najlepszym sposobem przekazania danych z jednej części aplikacji do drugiej jest przekazanie odwołania do obiektu (instancji klasy) zawierającego wszystkie istotne dane w jego elementach.

Można również użyć klas statycznych, które zachowują się podobnie do zmiennych globalnych, ale kiedy lepiej poznasz programowanie obiektowe, zrozumiesz, że nie jest to dobry sposób na przetwarzanie danych.

2

Użyłbym Generic jak listy, ponieważ nie musisz się martwić o rozmiar i można uzyskać iterator dla niego w pętli foreach.

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

wstawić element:

values.Add("item"); 

do usunięcia:

values.Remove("item"); 

Jeśli chcesz wielowymiarowe wtedy użyć:

List<List<string>> multi_dimens_values; 
1

myślę Dictionary<string, string> będzie bardziej odpowiedni... Możesz przejść przez nie i uzyskać dostęp do określonego elementu. A także przekazać to do swoich metod.

1

To bardzo zły pomysł.

  1. unikaj zmiennych globalnych tak bardzo, jak to możliwe. jest kilka przypadków, w których potrzebujesz publicznego, zmiennego singletonu.
  2. użyć obiektu jawnego (POCO) zamiast tablicy wielowymiarowej. zobacz poniżej na przykład
  3. zamiast tego utwórz/zapisz/załaduj obiekty z pamięci w razie potrzeby.

    klasa Aukcja { publicznego długo Id {get; set;} public string ItemName {get; set;} ... }

9

Nie proponujemy, aby używać tablic globalnych, nie jest najlepszą praktyką, co trzeba jest repozytorium danych i wziąć stamtąd danych chcesz użyć , jeśli chodzi o strukturę, której chcesz użyć proponuję zrobić coś takiego:

public class Auction 
{ 
      public string auctionID {get; set;} 
      public string itemName {get; set;} 
      public string itemID {get; set;} 
      public string bid {get; set;} 
      public string buyout {get; set;} 
      public int quantity {get; set;} 
} 

a następnie użyć listę danego obiektu, aby uzyskać dostęp do danych.

List<Auction> acutions = new List<Auction>(); 

Następnie można dodawać lub usuwać elementy według potrzeb.

auctions.Add(auction object); 
auctions.remove(auction object); 

albo poruszać się po liście z pętlą foreach

foreach (Auction item in auctions) 
{ 
// your code to handle items here 
} 
Powiązane problemy