using static System.Console;
public class Program {
public static void Main() {
var pai = new Pai();
WriteLine(pai.Metodo1(1).GetType());
var filha = new Filha();
WriteLine(filha.Metodo1(1).GetType());
filha.PropriedadeB = "xxx";
WriteLine(filha.Metodo1(1).GetType());
var temp = filha.Metodo1(1);
WriteLine(temp.PropriedadeB);
}
}
public class Pai : Pai<Pai> { }
public class Pai<T> where T : Pai<T> {
protected string PropriedadeA { get; set; }
public T Metodo1(int valor) {
//Vários procedimentos feitos aqui
PropriedadeA = "Resultado do tratamento";
return (T)this;
}
}
public class Filha : Pai<Filha> {
public string PropriedadeB { get; set; }
}
//https://pt.stackoverflow.com/q/47970/101
dXNpbmcgc3RhdGljIFN5c3RlbS5Db25zb2xlOwoKcHVibGljIGNsYXNzIFByb2dyYW0gewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKSB7CgkJdmFyIHBhaSA9IG5ldyBQYWkoKTsKCQlXcml0ZUxpbmUocGFpLk1ldG9kbzEoMSkuR2V0VHlwZSgpKTsKCQl2YXIgZmlsaGEgPSBuZXcgRmlsaGEoKTsKCQlXcml0ZUxpbmUoZmlsaGEuTWV0b2RvMSgxKS5HZXRUeXBlKCkpOwoJCWZpbGhhLlByb3ByaWVkYWRlQiA9ICJ4eHgiOwoJCVdyaXRlTGluZShmaWxoYS5NZXRvZG8xKDEpLkdldFR5cGUoKSk7CgkJdmFyIHRlbXAgPSBmaWxoYS5NZXRvZG8xKDEpOwoJCVdyaXRlTGluZSh0ZW1wLlByb3ByaWVkYWRlQik7Cgl9Cn0KCnB1YmxpYyBjbGFzcyBQYWkgOiBQYWk8UGFpPiB7IH0KCnB1YmxpYyBjbGFzcyBQYWk8VD4gd2hlcmUgVCA6IFBhaTxUPiB7CiAgICBwcm90ZWN0ZWQgc3RyaW5nIFByb3ByaWVkYWRlQSB7IGdldDsgc2V0OyB9CiAgICBwdWJsaWMgVCBNZXRvZG8xKGludCB2YWxvcikgewogICAgICAgIC8vVsOhcmlvcyBwcm9jZWRpbWVudG9zIGZlaXRvcyBhcXVpCiAgICAgICAgUHJvcHJpZWRhZGVBID0gIlJlc3VsdGFkbyBkbyB0cmF0YW1lbnRvIjsKICAgICAgICByZXR1cm4gKFQpdGhpczsKICAgIH0KfQoKcHVibGljIGNsYXNzIEZpbGhhIDogUGFpPEZpbGhhPiB7CglwdWJsaWMgc3RyaW5nIFByb3ByaWVkYWRlQiB7IGdldDsgc2V0OyB9Cn0KCi8vaHR0cHM6Ly9wdC5zdGFja292ZXJmbG93LmNvbS9xLzQ3OTcwLzEwMQ==