Следует иметь в виду, что шаблоны C++ и C# generics не совсем то же самое. См. Это answer для получения более подробной информации об этих отличиях.
Со страницы, которую вы связали с объяснением концепций C++ 0x, похоже, идея заключается в том, что в C++ вы хотите указать, что тип шаблона реализует определенные свойства. В C# ограничение идет дальше этого и заставляет общий тип быть «из» этого ограничения. Например, следующий код C#:
public GenericList<T> where T : IDisposable
говорит, что любой тип используется вместо T должны реализовать интерфейс IDisposable. Подобным же образом, следующий код:
public abstract class ABC {}
public class XYZ : ABC {}
public GenericList<T> where T : ABC
говорит, что любой тип используется вместо T должен быть типа ABC или производным от ABC.
Идея концепции C++ 0x говорит только о том, что тип, используемый вместо T, должен иметь те же свойства, которые определены ABC (или IDisposable), а не то, что он должен быть такого типа.
если он летает, как утка и крякает, как утка, то это должна быть утка? :-) – Zen
Если это не понятие * утки. Кажется, есть небольшая разница в том, что C# обеспечивает тот факт, что тип должен быть ограниченным, в то время как понятие просто говорит, что оно должно иметь эти свойства, но не должно быть такого типа. –