public static void Main() {
WriteLine(pai.Metodo1(1).GetType());
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) {
PropriedadeA = "Resultado do tratamento";
public class Filha : Pai<Filha> {
public string PropriedadeB { get; set; }