Qual è la differenza tra concetti c ++ 0x e vincoli c #?
-
20-08-2019 - |
Domanda
C ++ 0x introduce concetti , che ti consentono di definire, fondamentalmente, un tipo di un tipo. Specifica le proprietà richieste di un tipo .
C # ti consente di specificare vincoli di un generico con " dove & Quot; Clausola.
C'è qualche differenza semantica tra loro?
Grazie.
Soluzione
Una cosa da tenere a mente è che i modelli C ++ e i generici C # non sono esattamente gli stessi. Vedi questa risposta per maggiori dettagli su tali differenze.
Dalla pagina che hai collegato alla spiegazione dei concetti di C ++ 0x, sembra che l'idea sia che in C ++ desideri essere in grado di specificare che il tipo di modello implementa determinate proprietà. In C #, il vincolo va oltre e obbliga il tipo generico a essere & Quot; di & Quot; quel vincolo. Ad esempio, il seguente codice C #:
public GenericList<T> where T : IDisposable
afferma che qualsiasi tipo utilizzato al posto di T deve implementare l'interfaccia IDisposable. Allo stesso modo, il seguente codice:
public abstract class ABC {}
public class XYZ : ABC {}
public GenericList<T> where T : ABC
dice che qualsiasi tipo usato al posto di T deve essere di tipo ABC o derivato da ABC.
L'idea concettuale C ++ 0x dice solo che il tipo usato al posto di T deve avere le stesse proprietà definite da ABC (o IDisposable) e non che deve essere di quel tipo.