Если метод только читает значения, он может быть объявлен как:
void Method(IEnumerable<Base> list)
таким образом, ваш вызывающий код будет работать нормально в C # 4 / .NET 4 безлюбые изменения.В .NET 3.5 вы могли бы использовать
Method(derivedList.Cast<Base>());
Если ваш метод , добавляющий значения в список, тогда общая ковариация не будет и не будет работать .В конце концов, вы бы не хотели, чтобы к вашему List<MyClass>
добавлялась ссылка на экземпляр какого-то другого класса, производного от Base
, не так ли?
Создание Method
generic (как предложил Клаус) также будет работать в различных ситуациях, но также может сделать код более сложным.Трудно сказать, является ли это хорошим подходом, не зная, что делает ваш метод ... хотя определенно стоит попробовать.