using static System.Console;
public class Program {
public static void Main() {
var cA = new ClasseA();
var cB = new ClasseB();
cA.Metodo1(cA);
cB.Metodo1(cB);
}
}
public interface IClasse<T> where T : IClasse<T> {
void Metodo1(T parametro);
}
public class ClasseA : IClasse<ClasseA> {
public void Metodo1(ClasseA parametro) {
WriteLine("ClasseA");
return;
}
}
public class ClasseB : IClasse<ClasseB> {
public void Metodo1(ClasseB parametro) {
WriteLine("ClasseB");
return;
}
}
//https://pt.stackoverflow.com/q/47925/101
dXNpbmcgc3RhdGljIFN5c3RlbS5Db25zb2xlOwoJCQkJCQpwdWJsaWMgY2xhc3MgUHJvZ3JhbSB7CglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpIHsKCQl2YXIgY0EgPSBuZXcgQ2xhc3NlQSgpOwoJCXZhciBjQiA9IG5ldyBDbGFzc2VCKCk7CgkJY0EuTWV0b2RvMShjQSk7CgkJY0IuTWV0b2RvMShjQik7Cgl9Cn0KCnB1YmxpYyBpbnRlcmZhY2UgSUNsYXNzZTxUPiB3aGVyZSBUIDogSUNsYXNzZTxUPiB7Cgl2b2lkIE1ldG9kbzEoVCBwYXJhbWV0cm8pOwp9CgpwdWJsaWMgY2xhc3MgQ2xhc3NlQSA6IElDbGFzc2U8Q2xhc3NlQT4gewoJcHVibGljIHZvaWQgTWV0b2RvMShDbGFzc2VBIHBhcmFtZXRybykgewoJCVdyaXRlTGluZSgiQ2xhc3NlQSIpOwoJCXJldHVybjsKCX0KfQoKcHVibGljIGNsYXNzIENsYXNzZUIgOiBJQ2xhc3NlPENsYXNzZUI+IHsKCXB1YmxpYyB2b2lkIE1ldG9kbzEoQ2xhc3NlQiBwYXJhbWV0cm8pIHsKCQlXcml0ZUxpbmUoIkNsYXNzZUIiKTsKCQlyZXR1cm47Cgl9Cn0KCi8vaHR0cHM6Ly9wdC5zdGFja292ZXJmbG93LmNvbS9xLzQ3OTI1LzEwMQ==