Héritages et autres amusements

Une classe B héritant de A tel que la classe A possède une méthode virtuelle et que la classe B héritant de cette méthode virtuelle la surchage sachant que… Qu’affiche en sortie le code suivant:

A a=new B() ?
a = a as A();
a.methode();

Si vous avez déjà passé des entretiens d’embauche, voici le genre de questions absurdes et humiliantes que vous aurez à répondre au hasard si vous n’êtes pas préparé un minimum.

Afin de savoir répondre une fois pour toute, voici quelques explications simples et rapide à retenir.

  •  »  » / new => le mot clé new ou l’absence de mot clé est identique pour le compilateur .NET, la seule différence est une alerte lors de la compilation si vous n’utilisez pas ce mot clé.
  • override => ne surchage que les méthodes virtuelles.

Voici le code de base:

public class A
    {
         [mot cle] public void DisplayClass()
        {
            Console.WriteLine("Hello I'm A");
        }
    }
 
public class B:A
    {
        [mot cle] public void DisplayClass()
        {
            Console.WriteLine("Hello I'm B");
        }
    }

Légende
EC = Erreur de Compilation
AC = Alerte lors de la Compilation

Situation 1

B b = new B();
b.DisplayClass();
 A \ B vide new virtual override
vide AC
Hello I’m B

Hello I’m B
AC
Hello I’m B
EC
abstract EC EC EC Hello I’m B
virtual AC
Hello I’m B

Hello I’m B
AC
Hello I’m B

Hello I’m B
new  AC
Hello I’m B
 AC
Hello I’m B
 AC
Hello I’m B
 EC

Situation 2

A a = new B();
a.DisplayClass();
 A \ B vide new virtual override
vide AC
Hello I’m A

Hello I’m A
AC
Hello I’m A
EC
abstract EC EC EC Hello I’m B
virtual AC
Hello I’m A

Hello I’m A
AC
Hello I’m A

Hello I’m B
new  AC
Hello I’m A
 AC
Hello I’m A
 AC
Hello I’m A
 EC

Comments are closed.