Stack Класс

Определение

Представляет простую коллекцию объектов, не являющихся универсальными (LIFO).

public ref class Stack : System::Collections::ICollection
public ref class Stack : ICloneable, System::Collections::ICollection
public class Stack : System.Collections.ICollection
public class Stack : ICloneable, System.Collections.ICollection
[System.Serializable]
public class Stack : ICloneable, System.Collections.ICollection
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class Stack : ICloneable, System.Collections.ICollection
type Stack = class
    interface ICollection
    interface IEnumerable
type Stack = class
    interface ICollection
    interface IEnumerable
    interface ICloneable
[<System.Serializable>]
type Stack = class
    interface ICollection
    interface IEnumerable
    interface ICloneable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Stack = class
    interface ICollection
    interface IEnumerable
    interface ICloneable
Public Class Stack
Implements ICollection
Public Class Stack
Implements ICloneable, ICollection
Наследование
Stack
Атрибуты
Реализации

Примеры

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

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
*/
Imports System.Collections

Public Class SamplesStack    
    
    Public Shared Sub Main()
    
        ' Creates and initializes a new Stack.
        Dim myStack As New Stack()
        myStack.Push("Hello")
        myStack.Push("World")
        myStack.Push("!")
        
        ' Displays the properties and values of the Stack.
        Console.WriteLine("myStack")
        Console.WriteLine(ControlChars.Tab & "Count:    {0}", myStack.Count)
        Console.Write(ControlChars.Tab & "Values:")
        PrintValues(myStack)
    End Sub
    
    Public Shared Sub PrintValues(myCollection As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myCollection
            Console.Write("    {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub

End Class

' This code produces the following output.
'
' myStack
'     Count:     3
'     Values:    !    World    Hello

Комментарии

Емкость Stack — это количество элементов, которые Stack могут храниться. Так как элементы добавляются в объект Stack, емкость автоматически увеличивается по мере необходимости при перемещении.

Important

Мы не рекомендуем использовать Stack класс для новой разработки. Вместо этого рекомендуется использовать универсальный System.Collections.Generic.Stack<T> класс. Дополнительные сведения см. в статье, не относящийся к универсальным коллекциям, которые не должны использоваться на сайте GitHub.

Если Count емкость стека меньше емкости, Push это O(1) операция. Если емкость должна быть увеличена для размещения нового элемента, Push становится O(n) операцией, где n находится Count. Pop O(1)— это операция.

Stack null принимает в качестве допустимого значения и разрешает повторяющиеся элементы.

Конструкторы

Имя Описание
Stack()

Инициализирует новый экземпляр Stack класса, который пуст и имеет начальную емкость по умолчанию.

Stack(ICollection)

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

Stack(Int32)

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

Свойства

Имя Описание
Count

Возвращает количество элементов, содержащихся в Stack.

IsSynchronized

Возвращает значение, указывающее, синхронизирован ли доступ к Stack (потокобезопасный).

SyncRoot

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

Методы

Имя Описание
Clear()

Удаляет все объекты из объекта Stack.

Clone()

Создает неглубокую копию Stack.

Contains(Object)

Определяет, находится ли элемент в элементе Stack.

CopyTo(Array, Int32)

Копирует его в Stack существующий одномерный Arrayиндекс, начиная с указанного индекса массива.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetEnumerator()

Возвращает значение IEnumerator для Stackобъекта .

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
Peek()

Возвращает объект в верхней части Stack без удаления.

Pop()

Удаляет и возвращает объект в верхней части Stackобъекта.

Push(Object)

Вставляет объект в верхней части Stackобъекта.

Synchronized(Stack)

Возвращает синхронизированный (потокобезопасный) оболочку для Stack.

ToArray()

Копирует его в Stack новый массив.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Методы расширения

Имя Описание
AsParallel(IEnumerable)

Включает параллелизацию запроса.

AsQueryable(IEnumerable)

Преобразует IEnumerable в IQueryable.

Cast<TResult>(IEnumerable)

Приведение элементов IEnumerable к указанному типу.

OfType<TResult>(IEnumerable)

Фильтрует элементы IEnumerable на основе указанного типа.

Применяется к

Потокобезопасность

Общедоступные статические (Shared в Visual Basic) элементы этого типа являются потокобезопасны. Никакие члены экземпляра не гарантированы как потокобезопасные.

Чтобы гарантировать безопасность Stackпотока, все операции должны выполняться с помощью оболочки, возвращаемой методом Synchronized(Stack) .

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

См. также раздел