Stack Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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.