2009-01-31 7 views

risposta

9

Una cosa da tenere a mente è che i modelli C++ e i generici C# non sono esattamente gli stessi. Vedere questo answer per ulteriori dettagli su tali differenze.

Dalla pagina che hai collegato alla spiegazione di concetti C++ 0x, sembra che l'idea sia che in C++ si voglia essere in grado di specificare che il tipo di modello implementa determinate proprietà. In C#, il vincolo va oltre quello e costringe il tipo generico a essere "di" quel vincolo. Ad esempio, il seguente codice C#:

public GenericList<T> where T : IDisposable 

dice che qualsiasi tipo usato al posto di T deve implementare l'interfaccia IDisposable. Analogamente, il codice seguente:

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 del concetto C++ 0x indica solo che il tipo utilizzato al posto di T deve avere le stesse proprietà definite da ABC (o IDisposable) che non deve essere di quel tipo.

+1

se vola come un'anatra e caga come un'anatra, allora deve essere un'anatra? :-) – Zen

+0

A meno che non sia un * concetto * di anatra. Sembra esserci una sottile differenza in quanto C# rafforza il fatto che il tipo deve essere del vincolo mentre un concetto dice semplicemente che deve avere quelle proprietà ma non deve essere di quel tipo. –