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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top