public class Program {
public static void Main() {
var dog = new Cachorro() { Nome = "Toy", Patas = 4, MesesGestacao = 3, Especie = "Cachorro" };
IPet<Animal> p1 = new Pet<Cachorro>();
}
}
class Animal {
public string Especie { get; set; }
}
class Mamifero : Animal {
public int MesesGestacao { get; set; }
}
class Cachorro : Mamifero {
public string Nome { get; set; }
public int Patas { get; set; }
}
interface IPet<out T> where T : Animal {
string Apelido { get; set; }
}
class Pet<T> : IPet<T> where T : Animal {
public string Apelido { get; set; }
}
//https://pt.stackoverflow.com/q/508268/101
cHVibGljIGNsYXNzIFByb2dyYW0gewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKSB7CgkJdmFyIGRvZyA9IG5ldyBDYWNob3JybygpIHsgTm9tZSA9ICJUb3kiLCBQYXRhcyA9IDQsIE1lc2VzR2VzdGFjYW8gPSAzLCBFc3BlY2llID0gIkNhY2hvcnJvIiB9OwoJCUlQZXQ8QW5pbWFsPiBwMSA9IG5ldyBQZXQ8Q2FjaG9ycm8+KCk7Cgl9Cn0KY2xhc3MgQW5pbWFsIHsKCXB1YmxpYyBzdHJpbmcgRXNwZWNpZSB7IGdldDsgc2V0OyB9Cn0KY2xhc3MgTWFtaWZlcm8gOiBBbmltYWwgewoJcHVibGljIGludCBNZXNlc0dlc3RhY2FvIHsgZ2V0OyBzZXQ7IH0KfQpjbGFzcyBDYWNob3JybyA6IE1hbWlmZXJvIHsKCXB1YmxpYyBzdHJpbmcgTm9tZSB7IGdldDsgc2V0OyB9CglwdWJsaWMgaW50IFBhdGFzIHsgZ2V0OyBzZXQ7IH0KfQppbnRlcmZhY2UgSVBldDxvdXQgVD4gd2hlcmUgVCA6IEFuaW1hbCB7CglzdHJpbmcgQXBlbGlkbyB7IGdldDsgc2V0OyB9Cn0KY2xhc3MgUGV0PFQ+IDogSVBldDxUPiB3aGVyZSBUIDogQW5pbWFsIHsKCXB1YmxpYyBzdHJpbmcgQXBlbGlkbyB7IGdldDsgc2V0OyB9Cn0KCi8vaHR0cHM6Ly9wdC5zdGFja292ZXJmbG93LmNvbS9xLzUwODI2OC8xMDE=