Como todos los demás han dicho, se llama a B.Method2. Aquí es algunas otras piezas de información para entender lo que está pasando:
((A)B).Method2();
B.Method2();
Estos serán tanto llamar B.Method1(), ya que fue anulado correctamente. Para llamar al Método1 de A, debe haber una llamada base.Metodo1() hecha desde B (que a menudo, pero no siempre, se hace en la implementación de B.Método1).
Sin embargo, si B se definió de esta manera:
class B:A {
new public void Method1() { }
... luego de un Método1() se llama así porque Método1 no fue anulado en realidad, era ocultos y escondido fuera de las reglas del polimorfismo. En general, esto es típicamente algo malo de hacer. No siempre, pero asegúrese de saber muy bien lo que está haciendo y por qué lo hace si alguna vez hace algo como esto.
Por otro lado, usar nuevo de esta manera también hace algunas preguntas interesantes para la entrevista.
¿Por qué no lo pruebas? –
@Jeff: no importa; B.Method1() sigue siendo la función que se llama. – apandit
Creo que de acuerdo con la VMT (Tabla de métodos vitales) se llamará a la versión más reciente del método reemplazado. por lo que puede ser B.Method1() – TalentTuner