¿Cuál es la diferencia entre los conceptos de c ++ 0x y las restricciones de c #?
-
20-08-2019 - |
Pregunta
C ++ 0x introduce conceptos , que le permiten definir, básicamente, un tipo de tipo. Especifica las propiedades requeridas de un tipo .
C # le permite especificar restricciones de un genérico con " donde & Quot; cláusula.
¿Hay alguna diferencia semántica entre ellos?
Gracias.
Solución
Una cosa a tener en cuenta es que las plantillas de C ++ y los genéricos de C # no son exactamente iguales. Consulte esta respuesta para obtener más detalles sobre esas diferencias.
Desde la página que vinculó para explicar los conceptos de C ++ 0x, parece que la idea es que en C ++ desea poder especificar que el tipo de plantilla implementa ciertas propiedades. En C #, la restricción va más allá y obliga al tipo genérico a ser & Quot; de & Quot; esa restricción Por ejemplo, el siguiente código C #:
public GenericList<T> where T : IDisposable
dice que cualquier tipo usado en lugar de T debe implementar la interfaz IDisposable. Del mismo modo, el siguiente código:
public abstract class ABC {}
public class XYZ : ABC {}
public GenericList<T> where T : ABC
dice que cualquier tipo usado en lugar de T debe ser de tipo ABC o derivado de ABC.
La idea de concepto de C ++ 0x solo dice que el tipo utilizado en lugar de T debe tener las mismas propiedades definidas por ABC (o IDisposable), no que debe ser de ese tipo.