Как указал Лассе, ваша вторая версия не компилируется.Если вы измените его на
public abstract class Search<Name, Collection, TCriteria>
, он будет скомпилирован, но он не будет делать то, что вы от него хотели: он просто указывает универсальный класс с тремя параметрами типа, называемыми Name
, Collection
иTCriteria
.Но это никоим образом не ограничивает их, поэтому вы можете создать экземпляр, например Search<int, long, ulong>
.
Параметры типа обычно начинаются с T
, но язык никак не применяет его.
Таким образом, разница в том, что вторая версия не работает, используйте первую.