В чем разница между универсальным методом, ограниченным наследованием и параметром базового класса? - PullRequest
0 голосов
/ 30 мая 2018

Предположим, у меня есть следующий код:

public class BaseClass { }
public class DerivedClass : BaseClass { }

public void GenericMethod<T>(T input) where T : BaseClass
{
 //code
}

public void NormalMethod(BaseClass input)
{
 //code
}

Мой вопрос: в чем разница между этими двумя методами?Есть ли какие-либо преимущества или недостатки любого из этих методов и почему?

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Нет смысла использовать дженерики в коде, который вы показываете.

С другой стороны, если вы должны вернуть T, а не BaseClass из этого метода, вызывающая сторона может получить доступ к T -специфическим элементам вместо только объявленных элементовна BaseClass (если они не приводят возвращаемое значение).

0 голосов
/ 30 мая 2018

В чем разница между этими двумя методами?

В основном нет.

Есть ли какие-либо преимущества или недостатки у любого из этих методов?

В лучшем случае при использовании неуниверсальной версии наблюдается небольшое улучшение производительности (во время компиляции), так как для этого не требуется конкретная версия метода для компиляции.В противном случае я не могу придумать ничего существенного.

Что может быть использовано для использования дженериков здесь:

  • Когда вы вернетесь T;
  • Когда T необходимо извлечь из класса и интерфейса;
  • Если ваш класс использует аргумент типа, вы можете повторить указание требуемого типа снова.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...