public interface IMyInterface { }
public class MyClass : IMyInterface { }
public interface IBaseManager<out T> where T : IMyInterface {}
public class MyBaseManager<T> : IBaseManager<T> where T : IMyInterface { }
public class MyDerivedManager : MyBaseManager<MyClass> { }
public static void Main()
var ob1 = new MyDerivedManager();
var ob2 = (IBaseManager<IMyInterface>)ob1;
Console.WriteLine(ob2.GetType());