public class Program {
public static void Main() {
ITeste<Objeto> teste = new CarroTeste();
}
}
public class Objeto {
protected string _nome;
public string nome => _nome;
}
public class Carro : Objeto {
public Carro() => _nome = "Carro";
}
public interface ITeste<out T> where T : Objeto {
string GetNome();
}
public abstract class TesteBase<T> : ITeste<T> where T : Objeto {
protected Objeto _obj = null;
public abstract string GetNome();
}
public class CarroTeste : TesteBase<Carro> {
public override string GetNome() => "Meu nome é : " + _obj.nome;
}
//https://pt.stackoverflow.com/q/75097/101
cHVibGljIGNsYXNzIFByb2dyYW0gewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKSB7CgkJSVRlc3RlPE9iamV0bz4gdGVzdGUgPSBuZXcgQ2Fycm9UZXN0ZSgpOwoJfQp9CgpwdWJsaWMgY2xhc3MgT2JqZXRvIHsKICAgIHByb3RlY3RlZCBzdHJpbmcgX25vbWU7CiAgICBwdWJsaWMgc3RyaW5nIG5vbWUgPT4gX25vbWU7Cn0KCnB1YmxpYyBjbGFzcyBDYXJybyA6IE9iamV0byB7CiAgICBwdWJsaWMgQ2Fycm8oKSA9PiBfbm9tZSA9ICJDYXJybyI7Cn0KCnB1YmxpYyBpbnRlcmZhY2UgSVRlc3RlPG91dCBUPiB3aGVyZSBUIDogT2JqZXRvIHsKICAgIHN0cmluZyBHZXROb21lKCk7Cn0KCnB1YmxpYyBhYnN0cmFjdCBjbGFzcyBUZXN0ZUJhc2U8VD4gOiBJVGVzdGU8VD4gd2hlcmUgVCA6IE9iamV0byB7CiAgICBwcm90ZWN0ZWQgT2JqZXRvIF9vYmogPSBudWxsOwogICAgcHVibGljIGFic3RyYWN0IHN0cmluZyBHZXROb21lKCk7Cn0KCnB1YmxpYyBjbGFzcyBDYXJyb1Rlc3RlIDogVGVzdGVCYXNlPENhcnJvPiB7CiAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIEdldE5vbWUoKSA9PiAiTWV1IG5vbWUgw6kgOiAiICsgX29iai5ub21lOwp9CgovL2h0dHBzOi8vcHQuc3RhY2tvdmVyZmxvdy5jb20vcS83NTA5Ny8xMDE=