using System.Collections.Generic;
static public void Main(string[] args)
IClass2 c2= new Class2();
Class1 c1 = new Class1(c2);
c1.Process<Student>(new Student());
public interface IClass1 {
bool Process<T>(T t) where T : ISaveable;
public class Class1 : IClass1
public Class1(IClass2 repo)
public bool Process<T>(T t) where T : ISaveable
public class Class2 : IClass2
public void Save(Student e)
public void Save(Teacher e)
public interface ISaveable
public class Student : ISaveable
public void Save(IClass2 repo)
public class Teacher : ISaveable
public void Save(IClass2 repo)