Encore une différence notable entre C# et C++ :
En C# l'appel de méthodes virtuelles dans le constructeur de la classe de base vont bien aller chercher les méthodes de la classe dérivée.
Or le constructeur de la classe dérivée n'a pas encore été appellé.
Le chapitre 2.7 Les classes abstraites du pdf Introduction à C# 2008 disponible sur ce site, et que je suis en train de lire, aborde la fonctionnalité mais ne fait pas mention de ce problème.
Donc attendez-vous à des surprises.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 using System; using System.Collections.Generic; using System.Text; namespace csharp_test22 { abstract class Base { public Base() { Coucou(); Boom(); } public abstract void Coucou(); public abstract void Boom(); } class Derived : Base { string str = null; public Derived() { str = "ok"; } public override void Coucou() { Console.WriteLine( "Coucou Derived" ); } public override void Boom() { Console.WriteLine( str.GetType() ); } } }
Partager