Representa una colección sencilla de objetos no genéricos LIFO ("último en entrar, primero en salir").
Espacio de nombres: System.Collections
Ensamblado: mscorlib (en mscorlib.dll)
Visual Basic (Declaración)
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class Stack
Implements ICollection, IEnumerable, ICloneable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class Stack : ICollection, IEnumerable, ICloneable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class Stack : ICollection, IEnumerable, ICloneable
/** @attribute SerializableAttribute() */
/** @attribute ComVisibleAttribute(true) */
public class Stack implements ICollection, IEnumerable,
ICloneable
SerializableAttribute
ComVisibleAttribute(true)
public class Stack implements ICollection, IEnumerable,
ICloneable
Para obtener la versión genérica de esta colección, vea System.Collections.Generic.Stack.
Stack se implementa como un búfer circular.
La capacidad de Stack es el número de elementos que Stack puede contener. La capacidad inicial predeterminada de Stack es 10. A medida que se agregan elementos a una colección Stack, la capacidad aumenta automáticamente según lo requiera la reasignación.
Si Count es menor que la capacidad de la pila, Push es una operación O(1). Si es necesario aumentar la capacidad para alojar el nuevo elemento, Push se convierte en una operación O(n), en la que n es Count. Pop es una operación O(1).
La clase Stack acepta referencia de objeto null (Nothing en Visual Basic) como valor válido y admite elementos duplicados.
En el ejemplo siguiente se muestra cómo crear y agregar valores a Stack y cómo imprimirlos.
Imports System
Imports System.Collections
Imports Microsoft.VisualBasic
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 'PrintValues
End Class
' This code produces the following output.
'
' myStack
' Count: 3
' Values: ! World Hello
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
*/
using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myCollection );
int main()
{
// Creates and initializes a new Stack.
Stack^ myStack = gcnew 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 );
}
void PrintValues( IEnumerable^ myCollection )
{
IEnumerator^ myEnum = myCollection->GetEnumerator();
while ( myEnum->MoveNext() )
{
Object^ obj = safe_cast<Object^>(myEnum->Current);
Console::Write( " {0}", obj );
}
Console::WriteLine();
}
/*
This code produces the following output.
myStack
Count: 3
Values: ! World Hello
*/
import System.*;
import System.Collections.*;
public class SamplesStack
{
public static void main(String[] args)
{
// 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}",
System.Convert.ToString(myStack.get_Count()));
Console.Write("\tValues:");
PrintValues(myStack);
} //main
public static void PrintValues(IEnumerable myCollection)
{
IEnumerator objEnum = myCollection.GetEnumerator();
while (objEnum.MoveNext()) {
Console.Write(" {0}", objEnum.get_Current());
}
Console.WriteLine();
} //PrintValues
} //SamplesStack
/*
This code produces the following output.
myStack
Count: 3
Values: ! World Hello
*/
System.Object
System.Collections.Stack
Microsoft.VisualC.SymbolTableStack
Seguridad para subprocesos
Los miembros estáticos públicos (Shared en Visual Basic) de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.
Para garantizar la seguridad en la ejecución de los subprocesos de Stack, todas las operaciones se deben realizar mediante el contenedor devuelto por el método Synchronized.
La enumeración a través de una colección es un procedimiento sin seguridad intrínseca para la ejecución de subprocesos. Incluso cuando una colección está sincronizada, otros subprocesos todavía pueden modificarla, lo que hace que el enumerador produzca una excepción. Con el fin de garantizar la seguridad para la ejecución de subprocesos durante la enumeración, se puede bloquear la colección durante toda la enumeración o detectar las excepciones resultantes de los cambios realizados por otros subprocesos.
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter Edition
.NET Framework no admite todas las versiones de cada plataforma. Para obtener una lista de las versiones admitidas, vea Requisitos del sistema.
.NET Framework
Compatible con: 2.0, 1.1, 1.0
.NET Compact Framework
Compatible con: 2.0, 1.0