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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top