var macho = new Cachorro();
var femea = new Cachorro();
var filhote = Cruzar(macho, femea);
Console.Write(filhote.GetType());
public T Cruzar<T>(T macho, T femea) where T : Mamifero<T>
var filhote = Activator.CreateInstance<T>();
public abstract class Mamifero<T> where T : Mamifero<T>
public T Pai { get; set; }
public T Mae { get; set; }
public decimal Peso { get; set; }
public class Cachorro : Mamifero<Cachorro>
public string Raca { get; set; }
public class Gato : Mamifero<Gato>
public string Raca { get; set; }
public int Bigode { get; set; }
public class Elefante : Mamifero<Elefante>
public int Tromba { get; set; }