Stack Klasa

Definicja

Reprezentuje prostą niegeneryczną kolekcję obiektów typu last-in-first-out (LIFO).

C#
public class Stack : System.Collections.ICollection
C#
public class Stack : ICloneable, System.Collections.ICollection
C#
[System.Serializable]
public class Stack : ICloneable, System.Collections.ICollection
C#
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class Stack : ICloneable, System.Collections.ICollection
Dziedziczenie
Stack
Atrybuty
Implementuje

Przykłady

W poniższym przykładzie pokazano, jak utworzyć i dodać wartości do stosu oraz jak wyświetlić jego wartości.

C#
using System;
using System.Collections;
public class SamplesStack  {

   public static void Main()  {

      // Creates and initializes a new Stack.
      Stack myStack = new Stack();
      myStack.Push("Hello");
      myStack.Push("World");
      myStack.Push("!");

      // Displays the properties and values of the Stack.
      Console.WriteLine( "myStack" );
      Console.WriteLine( "\tCount:    {0}", myStack.Count );
      Console.Write( "\tValues:" );
      PrintValues( myStack );
   }

   public static void PrintValues( IEnumerable myCollection )  {
      foreach ( Object obj in myCollection )
         Console.Write( "    {0}", obj );
      Console.WriteLine();
   }
}


/*
This code produces the following output.

myStack
    Count:    3
    Values:    !    World    Hello
*/

Uwagi

Pojemność elementu Stack to liczba elementów, które Stack może pomieścić. Ponieważ elementy są dodawane do elementu Stack, pojemność jest automatycznie zwiększana zgodnie z wymaganiami za pośrednictwem reallocation.

Ważne

Nie zalecamy używania Stack klasy do nowego programowania. Zamiast tego zalecamy użycie klasy ogólnej System.Collections.Generic.Stack<T> . Aby uzyskać więcej informacji, zobacz Kolekcje inne niż ogólne nie powinny być używane w usłudze GitHub.

Jeśli Count jest mniejsza niż pojemność stosu, Push jest operacją O(1) . Jeśli pojemność musi zostać zwiększona, aby pomieścić nowy element, Push staje się operacją O(n) , gdzie n to Count. Pop jest operacją O(1) .

Stack null akceptuje jako prawidłową wartość i zezwala na zduplikowane elementy.

Konstruktory

Stack()

Inicjuje Stack nowe wystąpienie klasy, która jest pusta i ma domyślną pojemność początkową.

Stack(ICollection)

Inicjuje nowe wystąpienie Stack klasy zawierające elementy skopiowane z określonej kolekcji i ma taką samą pojemność początkową jak liczba skopiowanych elementów.

Stack(Int32)

Inicjuje Stack nowe wystąpienie klasy, która jest pusta i ma określoną pojemność początkową lub domyślną pojemność początkową, w zależności od tego, która z nich jest większa.

Właściwości

Count

Pobiera liczbę elementów zawartych w słowniku Stack.

IsSynchronized

Pobiera wartość wskazującą, czy dostęp do elementu Stack jest synchronizowany (bezpieczny wątek).

SyncRoot

Pobiera obiekt, który może służyć do synchronizowania dostępu do obiektu Stack.

Metody

Clear()

Usuwa wszystkie obiekty z obiektu Stack.

Clone()

Tworzy płytkią kopię elementu Stack.

Contains(Object)

Określa, czy element znajduje się w elemecie Stack.

CopyTo(Array, Int32)

Kopiuje element Stack do istniejącego jednowymiarowego Arrayobiektu , zaczynając od określonego indeksu tablicy.

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetEnumerator()

Zwraca element IEnumerator dla elementu Stack.

GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Type Pobiera bieżące wystąpienie.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
Peek()

Zwraca obiekt w górnej Stack części obiektu bez jego usuwania.

Pop()

Usuwa i zwraca obiekt w górnej części obiektu Stack.

Push(Object)

Wstawia obiekt w górnej części obiektu Stack.

Synchronized(Stack)

Zwraca zsynchronizowaną (bezpieczną wątkową) otokę dla elementu Stack.

ToArray()

Kopiuje element Stack do nowej tablicy.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Metody rozszerzania

Cast<TResult>(IEnumerable)

Rzutuje elementy elementu IEnumerable do określonego typu.

OfType<TResult>(IEnumerable)

Filtruje elementy elementu IEnumerable na podstawie określonego typu.

AsParallel(IEnumerable)

Umożliwia równoległość zapytania.

AsQueryable(IEnumerable)

Konwertuje element IEnumerable na .IQueryable

Dotyczy

Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0

Bezpieczeństwo wątkowe

Publiczne statyczne (Shared w Visual Basic) elementy członkowskie tego typu są bezpieczne wątkami. Wystąpienia elementów członkowskich nie dają gwarancji bezpieczeństwa wątków.

Aby zagwarantować bezpieczeństwo wątków elementu Stack, wszystkie operacje należy wykonać za pośrednictwem otoki zwróconej przez metodę Synchronized(Stack) .

Wyliczanie w kolekcji nie jest wewnętrznie procedurą odporną na wielowątkowość. Nawet gdy kolekcja jest synchronizowana, inne wątki nadal mogą ją modyfikować. Powoduje to zgłaszanie wyjątku przez moduł wyliczający. Aby zagwarantować bezpieczeństwo wątków podczas wyliczania, można zablokować kolekcję podczas całego procesu wyliczania albo rejestrować wyjątki wynikłe ze zmian wprowadzanych przez inne wątków.

Zobacz też