Bom dia.
Qual seria a diferença de eu inverter a ordem do casting nesse exercicio
Original: D d = (D)(C) new D();
Alterado: D d = (C)(D) new D();
quando eu altero pra essa sequencia ele nao compila, qual seria a importacia dessa ordem?
Bom dia.
Qual seria a diferença de eu inverter a ordem do casting nesse exercicio
Original: D d = (D)(C) new D();
Alterado: D d = (C)(D) new D();
quando eu altero pra essa sequencia ele nao compila, qual seria a importacia dessa ordem?
Oi Jose, tudo certo?
Nesse caso do cast, no primeiro código:
D d = (D)(C) new D();Primeiro fazemos o cast pra C, o que compila, pois C é superclasse de D. E depois fazemos o cast pra D novamente. O código não só compila como executa e imprime 1.
O problema de alterar a ordem do cast é que nesse caso:
D d = (C)(D) new D();Primeiro fazemos o cast pra D (já é do tipo D) e depois pra (C). Até aqui tudo certo. O problema é tentar atribuir esse objeto agora do tipo C para uma variável do tipo D. Por isso não  compila. 
Isso aqui seria válido, pois a variável que estamos atribuindo é do tipo C.
C d  = (C) (D) new D();Faz sentido? Se a dúvida persistir continuamos a conversa.
Abraço!
Bom dia Lucas,
Entendi sim, sua explicaçao foi muito boa. Obrigado.