SlideShare una empresa de Scribd logo
@GermanKuber
@NetBaires
http://germankuber.com.ar/perfil
• Agregados en la versión 2.0 de C#
• Concepto de parámetro de tipo
• Escribir clases con comportamiento genérico
• Maximizar la reutilización del código.
• Crear clases de colección.
• Crear interfaces, clases, métodos, eventos y delegados
genéricos.
• Habilitar el acceso a métodos en tipos de datos
determinados.
• Obtener información en tiempo de ejecución mediante la
reflexión.
• Garantiza la seguridad de tipos en tiempo de
compilación
• Escribir clases genéricas para tipos desconocidos
Generics C#
• Parámetros
• Clases
• Interfaces
• Métodos
• Delegados
• No se puede utilizar tal cual, porque no es realmente un
tipo, sino el plano de un tipo
• El argumento puede ser “cualquier” tipo conocido por el
compilador
public class GenericList<T>
{
public void Add(T item){ /*...*/ }
public void Remove(T item){ /*...*/ }
public IEnumerator<T> GetEnumerator(){ /*...*/ }
}
• Encapsulan operaciones que no son específicas de un tipo
de datos concreto
• Se utilizan frecuentemente con colecciones como listas
• Cuantos más tipos se puedan parametrizar, más
flexible y reutilizable será el código
class BaseNodeMultiple<T, U> { }
class Node4<T> : BaseNodeMultiple<T, int> { }
class Node5<T, U> : BaseNodeMultiple<T, U> { }
• Utilizar siempre las interfaces genéricas definidas por el
framework
• Una interfaz puede definir más de un parámetro de
tipo
• Las interfaces genéricas pueden heredar de interfaces
no genéricas si son contra-variantes
class Stack<T> where T : System.IComparable<T>,
IEnumerable<T> { }
interface IBaseInterface2<T, U> { }
class SampleClass1<T> : IBaseInterface1<T> { }
class SampleClass2<T> : IBaseInterface2<T, string> { }
• Se declara con parámetros de tipo
• Los métodos genéricos se pueden sobrecargar en varios
parámetros de tipo
class SampleClass<T>
{
void Swap(ref T lhs, ref T rhs) { /*...*/ }
void DoWork() { /*...*/ }
void DoWork<T>() { /*...*/ }
void DoWork<T, U>() { /*...*/ }
}
• Puede definir sus propios parámetros de tipo
class Stack<T>
{
T[] items;
public delegate void StackDelegate(T[] items);
delegate void StackEventHan<T, U>(T sender, U eventArgs);
public event SEventHan<Stack<T>, StackEvArgs> stackEvent;
}
Generics C#
public class GenericList<T>
{
public T GetLast()
{
T temp = default(T);
return temp;
}
}
• Aplicamos ciertas restricciones para limitar los tipos posibles de
nuestros genéricos
• El compilador generara error si se intenta utilizar un tipo que no
cumpla las restricciones
• Las restricciones se definen utilizando la palabra reservada
where
• No se pueden utilizar los operadores != ni ==
• Pueden convertirse a o desde System.Object
• Pueden convertirse explícitamente en cualquier tipo de interfaz
• Se pueden comparar con null.
Restricción
where T: struct
where T : class
where T : new()
where T : <nombre de clase base>
where T: <nombre de interfaz>
where T : U
public class Employee{}
public class GenericList<T>
where T : Employee{}
class Test<T, U>
where U : struct
where T : Employee, new() { }
void Add<U>(List<U> items) where U
: T {}
[CustomAttribute(info = typeof(GenericClass1<>))]
class ClassA { }
[CustomAttribute(info = typeof(GenericClass2<,>))]
class ClassB { }
[CustomAttribute(info = typeof(GenericClass3<int, double, string>))]
class ClassC { }
public class Person { /*...*/ }
public class Employee : Person { /*...*/ }
interface IRepository<T> { /*...*/ }
public class Repository<T> : IRepository<T>{}
void Each(IRepository<Person> p){ /*...*/ }
Each(new Repository<Employee>());
public class Person { /*...*/ }
public class Employee : Person { /*...*/ }
interface IRepository<out T> { /*...*/ }
public class Repository<T> : IRepository<T>{}
void Each(IRepository<Person> p){ /*...*/ }
Each(new Repository<Employee>());
public class Person { /*...*/ }
public class Employee : Person { /*...*/ }
interface IRepository<T> { /*...*/ }
public class Repository<T> : IRepository<T>{}
void Each(IRepository<Employee> p){ /*...*/ }
Each(new Repository<Person>());
public class Person { /*...*/ }
public class Employee : Person { /*...*/ }
interface IRepository<in T> { /*...*/ }
public class Repository<T> : IRepository<T>{}
void Each(IRepository<Employee> p){ /*...*/ }
Each(new Repository<Person>());
Generics C#
@GermanKuber
@NetBaires
http://germankuber.com.ar/perfil

Más contenido relacionado

PDF
Sesion 01 funciones y_procedimientos
PDF
.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez
PDF
PPTX
MéTodos En Java
PPTX
MéTodos Java
PDF
4. Programación con arrays, funciones, y objetos definidos por el usuario
Sesion 01 funciones y_procedimientos
.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez
MéTodos En Java
MéTodos Java
4. Programación con arrays, funciones, y objetos definidos por el usuario

La actualidad más candente (20)

PPT
Clase 2 Poo
PPTX
Metodos Get y Set, finalmente revelados.
PPTX
Tema 3 xml processing ap is
PPTX
PPTX
P2C2 Introducción a JEE5
PPTX
05 Creando Clases
PPTX
Programación 3: clases derivadas y polimorfismo
PPT
Implementación de Aplicaciones Basadas en Texto
PPTX
Framework .NET 3.5 05 Tipo y jerarquía de objetos
PPT
Introducción a la Programaciónen Java
PPT
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
PPTX
Programación 1: modularización
PDF
Programación 3: Clases y objetos en Java
PPTX
Video 1 metodos y arreglos
PPT
Constructor Y Destructor
PPTX
Constructores en java(grupo 8)
PDF
Tipos de Datos Abstractos (TDA)
PPTX
4 Introducción al lenguaje Scala
PPTX
Metodos,variables, pasodeparametros
DOCX
Elementos de una clase
Clase 2 Poo
Metodos Get y Set, finalmente revelados.
Tema 3 xml processing ap is
P2C2 Introducción a JEE5
05 Creando Clases
Programación 3: clases derivadas y polimorfismo
Implementación de Aplicaciones Basadas en Texto
Framework .NET 3.5 05 Tipo y jerarquía de objetos
Introducción a la Programaciónen Java
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
Programación 1: modularización
Programación 3: Clases y objetos en Java
Video 1 metodos y arreglos
Constructor Y Destructor
Constructores en java(grupo 8)
Tipos de Datos Abstractos (TDA)
4 Introducción al lenguaje Scala
Metodos,variables, pasodeparametros
Elementos de una clase
Publicidad

Similar a Generics C# (20)

PPT
8 introduccion colecciones
PPT
Introducción-a-Microsoft.NET-[parte3]
PPT
Curso c sharp
PPT
Intro c sharp
PPT
PPT
Linq
PPT
Linq
DOC
Resumen lenguajes c#
PPTX
Lenguajes de Programación: Clases y objetos
DOCX
Los tipos de un espacio de nombres
PPT
Linq 1207579553462901 8
PPTX
Programacion
PPTX
4-Unidad 1: Introducción a la Plataforma .NET-1.2 Compònentes del Framework ....
PDF
Tarea v de programacion ii
PPTX
Framework .NET 3.5 06 Operativa básica del framework .net
PDF
Generics - Dev.java.pdf
DOCX
encuesta
PPTX
Lenguaje de la programación orientada a objetos c#
PPTX
PPTX
Operadores poo
8 introduccion colecciones
Introducción-a-Microsoft.NET-[parte3]
Curso c sharp
Intro c sharp
Linq
Linq
Resumen lenguajes c#
Lenguajes de Programación: Clases y objetos
Los tipos de un espacio de nombres
Linq 1207579553462901 8
Programacion
4-Unidad 1: Introducción a la Plataforma .NET-1.2 Compònentes del Framework ....
Tarea v de programacion ii
Framework .NET 3.5 06 Operativa básica del framework .net
Generics - Dev.java.pdf
encuesta
Lenguaje de la programación orientada a objetos c#
Operadores poo
Publicidad

Más de Germán Küber (20)

PPTX
Explorando el Diseño de la Memoria en Rust
PPTX
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
PPTX
Mev Rapido.pptx
PPTX
Que son los smart contracts.pptx
PPTX
De 0 a blockchain developer en 3 meses
PPTX
Patrones funcionales
PPTX
Patrones de diseño en solidity
PPTX
Vertical slice architecture
PPTX
De 0 a blockchain developer en 3 meses
PPTX
Diamon pattern presentation
PPTX
Patrones funcionales
PPTX
Defensive code
PPTX
Programación Funcional C#
PPTX
Unit testing consejos
PPTX
Defensive code C#
PPTX
Event sourcing
PPTX
C sharp 8
PPTX
Arquitectura en aplicaciones Angular y buenas practicas.
PPTX
Un mundo sin if. generics al rescate
PPTX
Azure 360º para Desarrolaldores
Explorando el Diseño de la Memoria en Rust
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
Mev Rapido.pptx
Que son los smart contracts.pptx
De 0 a blockchain developer en 3 meses
Patrones funcionales
Patrones de diseño en solidity
Vertical slice architecture
De 0 a blockchain developer en 3 meses
Diamon pattern presentation
Patrones funcionales
Defensive code
Programación Funcional C#
Unit testing consejos
Defensive code C#
Event sourcing
C sharp 8
Arquitectura en aplicaciones Angular y buenas practicas.
Un mundo sin if. generics al rescate
Azure 360º para Desarrolaldores

Último (20)

PDF
Estrategia de apoyo tecnología grado 9-3
PPT
El-Gobierno-Electrónico-En-El-Estado-Bolivia
PDF
Estrategia de apoyo tecnología miguel angel solis
PDF
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
PPTX
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PPT
introduccion a las_web en el 2025_mejoras.ppt
PPTX
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PDF
Maste clas de estructura metálica y arquitectura
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PDF
Plantilla para Diseño de Narrativas Transmedia.pdf
PPTX
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
PPTX
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
PDF
taller de informática - LEY DE OHM
PDF
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
PPTX
Presentación PASANTIAS AuditorioOO..pptx
PDF
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
PPTX
REDES INFORMATICAS REDES INFORMATICAS.pptx
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
Estrategia de apoyo tecnología grado 9-3
El-Gobierno-Electrónico-En-El-Estado-Bolivia
Estrategia de apoyo tecnología miguel angel solis
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
introduccion a las_web en el 2025_mejoras.ppt
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
Maste clas de estructura metálica y arquitectura
historia_web de la creacion de un navegador_presentacion.pptx
Plantilla para Diseño de Narrativas Transmedia.pdf
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
taller de informática - LEY DE OHM
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
Presentación PASANTIAS AuditorioOO..pptx
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
REDES INFORMATICAS REDES INFORMATICAS.pptx
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx

Generics C#

  • 2. • Agregados en la versión 2.0 de C# • Concepto de parámetro de tipo • Escribir clases con comportamiento genérico
  • 3. • Maximizar la reutilización del código. • Crear clases de colección. • Crear interfaces, clases, métodos, eventos y delegados genéricos. • Habilitar el acceso a métodos en tipos de datos determinados. • Obtener información en tiempo de ejecución mediante la reflexión.
  • 4. • Garantiza la seguridad de tipos en tiempo de compilación • Escribir clases genéricas para tipos desconocidos
  • 6. • Parámetros • Clases • Interfaces • Métodos • Delegados
  • 7. • No se puede utilizar tal cual, porque no es realmente un tipo, sino el plano de un tipo • El argumento puede ser “cualquier” tipo conocido por el compilador
  • 8. public class GenericList<T> { public void Add(T item){ /*...*/ } public void Remove(T item){ /*...*/ } public IEnumerator<T> GetEnumerator(){ /*...*/ } }
  • 9. • Encapsulan operaciones que no son específicas de un tipo de datos concreto • Se utilizan frecuentemente con colecciones como listas • Cuantos más tipos se puedan parametrizar, más flexible y reutilizable será el código
  • 10. class BaseNodeMultiple<T, U> { } class Node4<T> : BaseNodeMultiple<T, int> { } class Node5<T, U> : BaseNodeMultiple<T, U> { }
  • 11. • Utilizar siempre las interfaces genéricas definidas por el framework • Una interfaz puede definir más de un parámetro de tipo • Las interfaces genéricas pueden heredar de interfaces no genéricas si son contra-variantes
  • 12. class Stack<T> where T : System.IComparable<T>, IEnumerable<T> { } interface IBaseInterface2<T, U> { } class SampleClass1<T> : IBaseInterface1<T> { } class SampleClass2<T> : IBaseInterface2<T, string> { }
  • 13. • Se declara con parámetros de tipo • Los métodos genéricos se pueden sobrecargar en varios parámetros de tipo
  • 14. class SampleClass<T> { void Swap(ref T lhs, ref T rhs) { /*...*/ } void DoWork() { /*...*/ } void DoWork<T>() { /*...*/ } void DoWork<T, U>() { /*...*/ } }
  • 15. • Puede definir sus propios parámetros de tipo
  • 16. class Stack<T> { T[] items; public delegate void StackDelegate(T[] items); delegate void StackEventHan<T, U>(T sender, U eventArgs); public event SEventHan<Stack<T>, StackEvArgs> stackEvent; }
  • 18. public class GenericList<T> { public T GetLast() { T temp = default(T); return temp; } }
  • 19. • Aplicamos ciertas restricciones para limitar los tipos posibles de nuestros genéricos • El compilador generara error si se intenta utilizar un tipo que no cumpla las restricciones • Las restricciones se definen utilizando la palabra reservada where
  • 20. • No se pueden utilizar los operadores != ni == • Pueden convertirse a o desde System.Object • Pueden convertirse explícitamente en cualquier tipo de interfaz • Se pueden comparar con null.
  • 21. Restricción where T: struct where T : class where T : new() where T : <nombre de clase base> where T: <nombre de interfaz> where T : U
  • 22. public class Employee{} public class GenericList<T> where T : Employee{} class Test<T, U> where U : struct where T : Employee, new() { } void Add<U>(List<U> items) where U : T {}
  • 23. [CustomAttribute(info = typeof(GenericClass1<>))] class ClassA { } [CustomAttribute(info = typeof(GenericClass2<,>))] class ClassB { } [CustomAttribute(info = typeof(GenericClass3<int, double, string>))] class ClassC { }
  • 24. public class Person { /*...*/ } public class Employee : Person { /*...*/ } interface IRepository<T> { /*...*/ } public class Repository<T> : IRepository<T>{} void Each(IRepository<Person> p){ /*...*/ } Each(new Repository<Employee>());
  • 25. public class Person { /*...*/ } public class Employee : Person { /*...*/ } interface IRepository<out T> { /*...*/ } public class Repository<T> : IRepository<T>{} void Each(IRepository<Person> p){ /*...*/ } Each(new Repository<Employee>());
  • 26. public class Person { /*...*/ } public class Employee : Person { /*...*/ } interface IRepository<T> { /*...*/ } public class Repository<T> : IRepository<T>{} void Each(IRepository<Employee> p){ /*...*/ } Each(new Repository<Person>());
  • 27. public class Person { /*...*/ } public class Employee : Person { /*...*/ } interface IRepository<in T> { /*...*/ } public class Repository<T> : IRepository<T>{} void Each(IRepository<Employee> p){ /*...*/ } Each(new Repository<Person>());

Notas del editor

  • #8: Denomine los parámetros de tipo genérico con nombres descriptivos, a menos que un nombre de una sola letra sea muy fácil de entender y un nombre descriptivo no agregue ningún valor. Considere el uso de T como nombre del parámetro de tipo para los tipos con un parámetro de tipo de una sola letra.
  • #21: No se pueden utilizar los operadores != ni ==, porque no existe ninguna garantía de que el argumento de tipo concreto admitirá estos operadores. Pueden convertirse a o desde System.Object, o bien convertirse explícitamente en cualquier tipo de interfaz. Se pueden comparar con null. Si un parámetro sin delimitar se compara con null, la comparación siempre devolverá false si el argumento de tipo es un tipo de valor.