-
Generics (genéricas) son una característica dónde las clases
-
y métodos, entre otras cosas, pueden ser
-
parsed por un tipo como parámetro.
-
Esto en efecto le permite a usted programar genéricamente
-
sin saber el tipo exacto del
-
dato con el cual estará trabajando.
-
Nosotros hemos visto antes que el método GetComponent
-
utiliza un parámetro genérico para obtener el tipo
-
de componente que está buscando.
-
GetComponent es lo que es conocido como un método genérico.
-
Echemos un vistazo en crear uno.
-
Aquí nosotros tenemos un ejemplo de un método simple genérico.
-
La primera cosa para mirar es su parámetro genérico.
-
Esto se llama T y está encerrado en unos paréntesis angulares
-
Después del nombre del método y antes de la normal.
-
o parámetros formales.
-
Ya que este T puede representar cualquier tipo
-
su nombre es arbitrario, pero en la mayoría utiliza la letra
-
T por convención.
-
Similarmente si usted desea tener múltiples parámetros
-
genéricos usted puede utilizar una coma para agregar más.
-
La convención de nombramiento usualmente sigue esos
-
parámetros después T son U y luego V.
-
Aunque las funciones genéricas no están limitadas solamente
-
a tres parámetros no es común ver uno
-
con más de tres.
-
Nosotros sabemos que el tipo genérico asociado con
-
este método es T.
-
T es solamente un lugar dónde colocarlo sin embargo, y terminará
-
siendo un tipo en realidad cuando el método sea llamado.
-
Cual sea el tipo que T termine siendo también
-
será el tipo de retorno y el tipo de argumento
-
para el método ya que ambos de estos utilizan
-
T como su tipo.
-
Aunque nosotros tenemos un método que funciona
-
con un tipo genérico, actualmente no es muy útil.
-
Entonces qué podemos hacer con un tipo genérico?
-
Bueno ya que nosotros no sabemos cómo este tipo genérico va a
-
actuar nosotros no podemos hacer mucho con él.
-
Este parámetro genérico podría ser cualquier cosa desde un
-
float a un monobehaviour y más.
-
Ya que nosotros no sabemos qué es no hay muchas
-
operaciones que podamos realizar.
-
No podemos, por ejemplo, multiplicar nuestro
-
monobehaviour por dos y nosotros no podemos acceder
-
el campo de game object de un float.
-
Ahora, solamente se trata como si fuera
-
un objeto de una clase, el cual es la clase base
-
de la cual todas las clases c# implícitamente heredan de.
-
Entonces cómo realizamos más operaciones?
-
Con el fin de saber algunas de las características del tipo
-
nosotros tenemos que limitar qué tipos pueden ser al
-
colocar una restricción en el parámetro genérico.
-
Para agregar restricciones a nuestra función nosotros ingresamos
-
dónde después de los parámetros
-
pero antes del cuerpo de la función.
-
Esto es seguido por el tipo genérico que nosotros vamos
-
a restringir, en nuestro caso T y luego dos puntos.
-
Después de los dos puntos nosotros tenemos las restricciones
-
especificas separadas por comas.
-
Las restricciones por lo general caen en cuatro categorías.
-
Usted puede ya sea utilizar la tecla clave ‘class’ para
-
asegurarse de que T es un tipo de referencia
-
o la palabra clave ‘struct’ para asegurarse de que sea un tipo de valor.
-
Usted puede utilizar la palabra clave ‘new’ seguida por
-
un par de paréntesis para asegurarse de que tenga
-
constructor público con ningún parámetros
-
Usted puede utilizar un nombre de clase para decir que T
-
es esa clase o vía polimorfismo
-
a cualquier clase que derive de ella.
-
La última categoría de restricciones son las interfaces.
-
Usted puede utilizar el nombre de una interfaz para decir que T
-
ha implementado esa interfaz.
-
Con el fin de utilizar un método genérico usted debe
-
especifica qué tipo usted quiere utilizar.
-
Digamos que usted quiero utilizar el método genérico
-
que acaba de crear.
-
En otra clase usted escribiría el nombre del método
-
seguido por paréntesis angulares y el tipo que usted quiere.
-
Usted luego seguiría eso con un paréntesis
-
y cualquier argumento.
-
Todas las características que hemos discutido aplican
-
a clases genéricas e interfaces al igual que métodos.
-
Al darle a una clase tipos genéricos usted
-
puede afectar los tipos de campos, propiedades
-
y métodos dentro de este.
-
Hacer clases genéricas es uno de los usos más
-
comunes de genéricos y hace que sea muy fácil
-
implementar estructuras de datos.
-
Echemos un vistazo a la clase genérica ahora.
-
Esta clase utiliza un tipo genérico de T.
-
Esto significa que cada instancia del tipo T
-
utilizado como un tipo en la clase
-
será remplazado por un tipo actual cuando sea utilizado.
-
Esta clase tiene una sola variable miembro
-
llamado ‘item’ que es de tipo T.
-
La clase también tiene un método llamado UpdateItem
-
que toma un solo argumento de tipo T
-
y le asigna un item miembro.
-
Con el fin de instanciar un objeto de esta clase
-
usted debe especificar un tipo para T.
-
Usted hace esto al ingresar el nombre de la clase
-
seguido por unos corchetes angulares y el tipo que usted quiere.
-
Usted debe también hacer esto después de ingresar el nombre
-
del constructor y antes de la lista de parámetros del constructor.
-
Uno de los usos más comunes de genéricos es para
-
colecciones como diccionarios y listas.
-
Para más información acerca de diccionarios y listas
-
ver la lección vinculada abajo.