public interface IMyInt<in T>
public static void Main()
MyClBase myClBase1 = new MyClBase();
IMyInt<Base> obj1 = myClBase1;
obj1.SetItem(new Derived());
MyClBase myClBase2 = new MyClBase();
IMyInt<Derived> obj2 = myClBase2;
obj2.SetItem(new Derived());
public class MyClBase : IMyInt<Base>
public void SetItem(Base item)
public virtual void Show()
Console.WriteLine("Base class method");
public class Derived : Base
public override void Show()
Console.WriteLine("Derived class method");