Stack Classe

Definizione

Rappresenta una semplice raccolta LIFO (Last-In-First-Out) non generica di oggetti.

public ref class Stack : System::Collections::ICollection
public ref class Stack : ICloneable, System::Collections::ICollection
public class Stack : 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
public class Stack : ICloneable, System.Collections.ICollection
type Stack = class
    interface ICollection
    interface IEnumerable
[<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
type Stack = class
    interface ICollection
    interface IEnumerable
    interface ICloneable
Public Class Stack
Implements ICollection
Public Class Stack
Implements ICloneable, ICollection
Ereditarietà
Stack
Attributi
Implementazioni

Esempio

Nell'esempio seguente viene illustrato come creare e aggiungere valori a stack e come visualizzarne i valori.

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

Commenti

La capacità di un Stack oggetto è il numero di elementi che può Stack contenere. Man mano che gli elementi vengono aggiunti a un Stackoggetto , la capacità viene aumentata automaticamente in base alle esigenze tramite la riallocazione.

Importante

Non è consigliabile usare la Stack classe per il nuovo sviluppo. È invece consigliabile usare la classe generica System.Collections.Generic.Stack<T>. Per altre informazioni, vedere Raccolte non generiche che non devono essere usate in GitHub.

Se Count è minore della capacità dello stack, Push è un'operazione O(1) . Se la capacità deve essere aumentata per contenere il nuovo elemento, Push diventa un'operazione O(n) , dove n è Count. Pop è un'operazione O(1) .

Stack accetta null come valore valido e consente elementi duplicati.

Costruttori

Nome Descrizione
Stack()

Inizializza una nuova istanza della classe Stack vuota e ha la capacità iniziale predefinita.

Stack(ICollection)

Inizializza una nuova istanza della Stack classe che contiene elementi copiati dalla raccolta specificata e ha la stessa capacità iniziale del numero di elementi copiati.

Stack(Int32)

Inizializza una nuova istanza della Stack classe vuota e ha la capacità iniziale specificata o la capacità iniziale predefinita, a condizione che sia maggiore.

Proprietà

Nome Descrizione
Count

Ottiene il numero di elementi contenuti in Stack.

IsSynchronized

Ottiene un valore che indica se l'accesso Stack a è sincronizzato (thread-safe).

SyncRoot

Ottiene un oggetto che può essere utilizzato per sincronizzare l'accesso al Stack.

Metodi

Nome Descrizione
Clear()

Rimuove tutti gli oggetti da Stack.

Clone()

Crea una copia superficiale dell'oggetto Stack.

Contains(Object)

Determina se un elemento si trova nel Stack.

CopyTo(Array, Int32)

Copia l'oggetto Stack in un oggetto unidimensionale Arrayesistente, a partire dall'indice di matrice specificato.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetEnumerator()

Restituisce un oggetto IEnumerator per l'oggetto Stack.

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
Peek()

Restituisce l'oggetto nella parte superiore dell'oggetto Stack senza rimuoverlo.

Pop()

Rimuove e restituisce l'oggetto nella parte superiore di Stack.

Push(Object)

Inserisce un oggetto nella parte superiore di Stack.

Synchronized(Stack)

Restituisce un wrapper sincronizzato (thread-safe) per .Stack

ToArray()

Copia l'oggetto Stack in una nuova matrice.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Metodi di estensione

Nome Descrizione
AsParallel(IEnumerable)

Abilita la parallelizzazione di una query.

AsQueryable(IEnumerable)

Converte un IEnumerable in un IQueryable.

Cast<TResult>(IEnumerable)

Esegue il cast degli elementi di un IEnumerable al tipo specificato.

OfType<TResult>(IEnumerable)

Filtra gli elementi di un IEnumerable in base a un tipo specificato.

Si applica a

Thread safety

I membri statici pubblici (Shared in Visual Basic) di questo tipo sono thread-safe. Non è garantito che tutti i membri dell'istanza siano thread-safe.

Per garantire la thread safety del Stack, tutte le operazioni devono essere eseguite tramite il wrapper restituito dal metodo Synchronized(Stack).

L'enumerazione tramite una raccolta non è intrinsecamente una procedura thread-safe. Anche quando una raccolta viene sincronizzata, altri thread possono comunque modificare la raccolta, causando la generazione di un'eccezione da parte dell'enumeratore. Per garantire la thread safety durante l'enumerazione, è possibile bloccare la raccolta durante l'intera enumerazione o intercettare le eccezioni risultanti dalle modifiche apportate da altri thread.

Vedi anche