В C # Generics идентичны ли эти две строки кода? - PullRequest
3 голосов
/ 04 июня 2011

Читая о дженериках, я натолкнулся на эти две части кода, и мне стало интересно, идентичны ли они?

public abstract class Search<T, TCollection, TCriteria>
        where TCollection : Collection<Name>
        where T : Name

И

public abstract class Search<Name, Collection<Name>, TCriteria>

Ответы [ 2 ]

5 голосов
/ 04 июня 2011

Нет, потому что во втором вы указываете конкретный универсальный параметр, но в первом вы указываете, что универсальным параметром может быть любой подкласс типа, указанного в предложении where.

1 голос
/ 04 июня 2011

Как указал Лассе, ваша вторая версия не компилируется.Если вы измените его на

public abstract class Search<Name, Collection, TCriteria>

, он будет скомпилирован, но он не будет делать то, что вы от него хотели: он просто указывает универсальный класс с тремя параметрами типа, называемыми Name, Collection иTCriteria.Но это никоим образом не ограничивает их, поэтому вы можете создать экземпляр, например Search<int, long, ulong>.

Параметры типа обычно начинаются с T, но язык никак не применяет его.

Таким образом, разница в том, что вторая версия не работает, используйте первую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...