using System.Collections.Generic;
public static void Main()
var teste = new Foo { details = new List<Detail>() } ;
teste.details.Add(new Detail { data = "oi"} );
public static void Exec(FooBase obj){
var a = (IBoo<Detail>)obj;
Console.WriteLine("Count: " + a.details.Count);
var b = (IBoo<IData>)obj;
Console.WriteLine("Count: " + b.details.Count);
public interface IBoo<T> {
List<T> details {get;set;}
public string baseValue {get;set;}
public class Detail: IData {
public string data {get;set;}
public class Foo : FooBase, IBoo<Detail>{
public List<Detail> details {get;set;}
public class Foo2 : FooBase, IBoo<Detail>{
public List<Detail> details {get;set;}