делает любой знает, возможно ли бросить универсальный тип с параметром определенного типа (например, Панель) к тому же универсальному типу с параметром типа, являющимся базовым типом Панели (такой как объект в моем случае). И, если бы возможно, как это было бы сделано?
То, что я хочу сделать, имеют набор Foo<object>
но смогите добавить Foos с аргументами более определенного типа.
Спасибо
Да, в C # 4.0 это возможно!
Вы должны изучить ковариацию .
Вы можете иметь коллекцию базового типа с добавленными подклассами. Например, следующее будет работать:
// Using:
public class Foo {} // Base class
public class Bar : Foo {} // Subclass
// Code:
List<Foo> list = new List<Foo>();
HashSet<Foo> hash = new HashSet<Foo>();
list.Add(new Bar());
list.Add(new Foo());
hash.Add(new Bar());
Поскольку «Bar» - это особый тип «Foo», совершенно законно добавить его в коллекцию Foo.
Однако до появления .NET 4 и модификатора out для ковариации вы не можете делать:
IEnumerable<Foo> list = new List<Bar>(); // This isn't supported in .NET 3.5...