То, что вы пытаетесь сделать, называется ковариация - преобразование из более узкого типа (TestClass) в более широкий тип (ITest). Это то, к чему вы будете привыкать все время, например, когда вы конвертируете из числа с плавающей точкой в двойное
К сожалению, .Net 3.5 и ниже не поддерживает ковариацию в общих классах.
.Net 4.0 теперь поддерживает ковариацию (и контравариантность) в дженериках при условии, что эти родовые классы скомпилированы с ключевыми словами out
для ковариантных типов и in
для контравариантных типов. IEnumerable
в .Net 4.0 определяется как ковариантный. Если вы щелкнете правой кнопкой мыши по типу IEnumerable
и нажмете «Перейти к определению», вы увидите это:
public interface IEnumerable<out T> : IEnumerable
Если вы используете VS2010, вам нужно убедиться, что ваш проект нацелен на .net 4.0. Это можно изменить в свойствах проекта. Щелкните правой кнопкой мыши по проекту, выберите свойства, перейдите на вкладку «Приложение» и убедитесь, что «Целевая среда» предназначена для .Net 4.
MSDN имеет больше информации .