Was ist der Unterschied zwischen c ++ 0x Konzepte und c # Zwänge?
-
20-08-2019 - |
Frage
C ++ 0x einleitet Konzepte , mit denen Sie definieren, im Grunde eine Art von einem Typ. es die Eigenschaften eines Typs erforderlich angibt.
C # können Sie angeben, Einschränkungen ein Generikums mit dem " wobei " -Klausel.
Gibt es einen semantischen Unterschied zwischen ihnen?
Danke.
Lösung
Eine Sache im Auge zu behalten ist, dass C ++ Vorlagen und C # Generika sind nicht genau das gleiche. Sehen Sie diese beantworten um weitere Details zu diesen Unterschieden.
Von der Seite, die Sie 0x Konzepte zu erklären, C ++ verknüpft, es klingt wie die Idee ist, dass in C ++ Sie angeben können, möchten, dass der Vorlagentyp bestimmte Eigenschaften implementiert. In C #, geht die Einschränkung weiter als das, und zwingt den generischen Typen „von“ dieser Einschränkung zu sein. Zum Beispiel kann der folgenden C # -Code:
public GenericList<T> where T : IDisposable
sagt, dass jede Art anstelle von T verwendet muss die IDisposable-Schnittstelle implementieren. Ebenso der folgende Code:
public abstract class ABC {}
public class XYZ : ABC {}
public GenericList<T> where T : ABC
sagt, dass jede Art anstelle von T verwendet vom Typ ABC oder von ABC abgeleitet sein muss.
Die C ++ 0x Konzeptidee sagt nur, dass die Art anstelle von T verwendet werden, muß die gleichen Eigenschaften hat wie ABC (oder IDisposable) definierte nicht, dass es diesen Typen sein.