Los parámetros entre la <
y >
son parámetros de tipo genérico. Los medicamentos genéricos, a un nivel muy alto, le permiten diseñar una clase que es agnóstico sobre el tipo particular, de uno o más de sus parámetros, propiedades o métodos. Es un poco difícil de explicar con palabras, pero el uso más común de los genéricos está en las colecciones.
Antes de genéricos, la mayoría de los desarrolladores utilizan cosas como ArrayList
hacer un seguimiento de las colecciones de objetos. La desventaja de esto fue la seguridad; porque podría poner object
en un ArrayList
, eso significaba que tenía que volver a lanzar el objeto al tipo esperado (haciendo que el código fuera menos limpio), y no tenía nada que le impidiera agregar algo que no era ese tipo de objeto (es decir, que podría tener un ArrayList
que podría estar esperando a contener sólo string
objetos, pero podría - accidentalmente - poner en una int
o una DbConnection
, etc.), y que nunca iba a encontrar a cabo hasta que el tiempo de ejecución cuando el yeso ha fallado.
ArrayList myStrings = new ArrayList();
myStrings.Add("foo");
myStrings.Add("bar");
myStrings.Add(1); // uh-oh, this isn't going to turn out well...
string string1 = (string)myStrings[0];
string string2 = (string)myStrings[1];
string string3 = (string)myStrings[2]; // this will compile fine but fail at
// runtime since myStrings[2] is an int,
// not a string
Después de la introducción de los genéricos, obtuvimos la clase List<T>
. Esta es una clase única que toma un solo argumento de tipo genérico, es decir, el tipo de objetos que espera que contenga la lista.De esta forma, puedo tener un List<string>
o un List<int>
que a) no requiera conversión, ya que los indexadores devuelven string
y int
, respectivamente, yb) estar seguro en tiempo de compilación, ya que sé que nada más que un string
o un int
(de nuevo, respectivamente) se puede poner en esas listas.
List<string> myStrings = new List<string>();
myStrings.Add("foo");
myStrings.Add("bar");
myStrings.Add(1); // this will not compile, as an int is not a string
El punto de genéricos, es decir que no se preocupan por lo que el tipo real es del objeto que se está trabajando, pero el consumidor de su poder de clase. En otras palabras, la mecánica de cómo una lista podría almacenar un string
, un int
, un DbConnection
, etc. son identicos, pero los genéricos hacen que esta información de tipo proveniente del consumidor de su clase no se pierda en su abstracción.
Ellos son [parámetros de tipo genérico] (http://msdn.microsoft.com/en-us/library/ms172192.aspx). – verdesmarald
gracias, pero ¿por qué preguntas para cerrar esta cuestión, al igual que algunos otros usuarios, diciendo que no es una cuestión real? Veo que en mi "mensaje" no es un signo de interrogación, tal vez no se rinde en su navegador? Necesito entender cómo funciona este sitio ... –