fork(1) download
  1. // ===++===
  2. //
  3. // OrtizOL
  4. //
  5. // ===--===
  6. /*============================================================
  7. //
  8. // Clase: NuevaListaGenerica.cs
  9. //
  10. // Propósito: Demostrar la creción de un tipo genérico
  11. // personalizado.
  12. //
  13. ============================================================*/
  14.  
  15. using System;
  16. using System.Collections.Generic;
  17.  
  18. namespace Articulos.Cap03
  19. {
  20. ///<summary>
  21. /// Tipo genérico ListaGenerica.
  22. /// T es el parámetro de tipo.
  23. ///</summary>
  24. internal class ListaGenerica<T>
  25. {
  26. ///<summary>
  27. /// La clase anidada `Nodo` también accede al parámetro de tipo `T`.
  28. ///</summary>
  29. private class Nodo
  30. {
  31. // Contiene referencia al siguiente nodo:
  32. private Nodo siguiente;
  33.  
  34. // Propiedad para recuperar y establecer el nodo siguiente:
  35. public Nodo Siguiente
  36. {
  37. get
  38. {
  39. return siguiente;
  40. }
  41. set
  42. {
  43. siguiente = value;
  44. }
  45. }
  46.  
  47. // Dato del nodo actual (de tipo `T`):
  48. private T valor;
  49.  
  50. // Propiedad para recuperar y establecer el valor del nodo actual:
  51. public T Valor
  52. {
  53. get
  54. {
  55. return valor;
  56. }
  57. set
  58. {
  59. valor = value;
  60. }
  61. }
  62.  
  63. ///<summary>
  64. /// El constructor con 1-argumento usa el parámetro de tipo `T`.
  65. ///<summary>
  66. public Nodo(T t)
  67. {
  68. siguiente = null;
  69. valor = t;
  70. }
  71. }
  72.  
  73. // Campo para referirse a la cabeza de la lista:
  74. private Nodo cabeza;
  75.  
  76. // Al crear la lista la cabeza de lista no tiene
  77. // asignado ningún valor.
  78. public ListaGenerica()
  79. {
  80. cabeza = null;
  81. }
  82.  
  83. ///<summary>
  84. /// Agrega un nuevo elemento de tipo T a la lista.
  85. ///</summary>
  86. public void Agregar(T t)
  87. {
  88. Nodo n = new Nodo(t);
  89. n.Siguiente = cabeza;
  90. cabeza = n;
  91. }
  92.  
  93. public IEnumerator<T> GetEnumerator()
  94. {
  95. Nodo actual = cabeza;
  96.  
  97. while (actual != null)
  98. {
  99. yield return actual.Valor;
  100. actual = actual.Siguiente;
  101. }
  102. }
  103. }
  104.  
  105. internal class PruebaNuevaListaGenerica
  106. {
  107. public static void Main()
  108. {
  109. // Creamos una lista con tipos enteros (int):
  110. ListaGenerica<int> listaEnteros = new ListaGenerica<int>();
  111.  
  112. // Agrega a a lista `listaEnteros` números en el rango 0-9:
  113. for (int x = 0; x < 10; ++x)
  114. {
  115. listaEnteros.Agregar(x);
  116. }
  117.  
  118. // Itera a través del contenido de la lista:
  119. Console.WriteLine("\nContenido de `listaEnteros`:");
  120. foreach(int numero in listaEnteros)
  121. {
  122. Console.WriteLine("\t{0}", numero.ToString());
  123. }
  124. Console.WriteLine();
  125. }
  126. }
  127. }
Success #stdin #stdout 0.03s 33960KB
stdin
Standard input is empty
stdout
Contenido de `listaEnteros`:
	9
	8
	7
	6
	5
	4
	3
	2
	1
	0