using System.Collections.Generic;
public class A {}
public class B: A {}
public interface IP<out T> where T: A {
}
public class P<T>: IP<T>where T: A {
T _a;
public P(T a) => _a = a;
public class Program
{
public static void Main()
var l = new List<IP<A>>();
var p = new P<B>(new B());
l.Add(p);