public interface IProduct
public class ProductA: IProduct
Console.WriteLine("Hello, I'm ProductA");
public class ProductB: IProduct
Console.WriteLine("Hello, I'm ProductB");
public IProduct DoSomething(IProduct product)
public class B<T> where T: IProduct
public T DoSomething(T product)
public static void Main()
var productA = new ProductA();
var productB = new ProductB();
var b = new B<ProductA>();
var c = new B<ProductB>();