Qual é a diferença entre C ++ 0x conceitos e C # constrangimentos?
-
20-08-2019 - |
Pergunta
C ++ 0x introduz conceitos , que permitem definir, basicamente, um tipo de um tipo. Ele especifica as propriedades necessárias de um tipo .
C # permitem especificar constrangimentos de um genérico com o " onde " cláusula.
Existe alguma diferença semântica entre eles?
Obrigado.
Solução
Uma coisa a ter em mente é que os modelos C ++ e C # genéricos não são exatamente os mesmos. Veja este resposta para obter mais detalhes sobre essas diferenças.
A partir da página é ligada ao explicar C ++ 0x conceitos, parece que a idéia é que em C ++ você quer ser capaz de especificar que o tipo de modelo implementos certas propriedades. Em C #, a restrição vai mais longe do que isso e forças o tipo genérico para ser "de" essa restrição. Por exemplo, o seguinte código C #:
public GenericList<T> where T : IDisposable
diz que qualquer tipo usado no lugar de T deve implementar a interface IDisposable. Da mesma forma, o código a seguir:
public abstract class ABC {}
public class XYZ : ABC {}
public GenericList<T> where T : ABC
diz que qualquer tipo usado no lugar de T deve ser do tipo ABC ou derivados de ABC.
O conceito idéia C ++ 0x diz apenas que o tipo usado no lugar de T deve ter as mesmas propriedades como definido pelo ABC (ou IDisposable), não que ele deve ser desse tipo.