я заметил, после некоторого времени использования дженериков, что не было большой разницы между этим:разница между базовым классом и contitioned родовой
public void DoSomething<T>(T t) where T : BaseClass{
}
и это:
public void DoSomething(BaseClass t){
}
Единственная разница у меня есть что первым методом могут быть добавлены другие ограничения, такие как интерфейсы или new()
, но если вы используете его только так, как я его написал, я не вижу большой разницы. Может ли кто-нибудь указать какие-либо важные факторы на выбор того или иного?
Для вашего ответа я думаю, что, как правило, лучше использовать общую версию, поэтому вы можете хранить больше информации о типе. – Gerard
@Gerard - Я бы не сказал, что лучше - они служат различным целям и имеют разные недостатки. То есть generics и inheritance часто вызывают путаницу: с помощью 'class My {}' следующие типы 'My ' и 'My ' чувствуют себя в некотором роде, но они всего лишь 2 отдельных типа; правильное тестирование общих методов требует больше случаев из-за открытости: 'void Do (int)' нуждается в тестировании для некоторых значений 'int', но' Void Do (T) 'нужен тест для некоторых типов значений, ссылочных типов; смешанный общий и не общий код иногда сложно, особенно когда общий тип требует реального типа ... –