В чем разница между концепциями c ++ 0x и ограничениями c #?
-
20-08-2019 - |
Вопрос
C ++ 0x вводит концепции, которые позволяют вам определить, по сути, тип типа. Он определяет свойства, требуемые от типа.
C # позволяет вам указать ограничения общего вида с "где" оговорка.
Есть ли какая-то смысловая разница между ними?
Спасибо.
Решение
Следует иметь в виду, что шаблоны C ++ и дженерики C # - это не совсем одно и то же.Видишь это ответ для получения более подробной информации об этих различиях.
Судя по странице, на которую вы ссылаетесь, объясняющей концепции 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), а не о том, что он должен быть этого типа.