2009-01-31 4 views
5

C++ 0x вводит понятия, которые позволяют вам определить, в основном, тип типа. It specifies the properties required of a type.В чем разница между концепциями C++ 0x и ограничениями C#?

C# позволяют определить ограничения родового с пунктом "where".

Есть ли какие-либо смысловые различия между ними?

спасибо.

ответ

9

Следует иметь в виду, что шаблоны 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), а не то, что он должен быть такого типа.

+1

если он летает, как утка и крякает, как утка, то это должна быть утка? :-) – Zen

+0

Если это не понятие * утки. Кажется, есть небольшая разница в том, что C# обеспечивает тот факт, что тип должен быть ограниченным, в то время как понятие просто говорит, что оно должно иметь эти свойства, но не должно быть такого типа. –

Смежные вопросы