Bonjour,

J'ai une question concernant un petit problème d'héritage.

J'ai une classe A qui appelle une fonction RemplirTab(). Dans cette fonction j'appelle CalculerValeur pour alimenter mon tableau.
La classe B hérite de A. Je cherche comment utiliser RemplirTab sans la réécrire dans B en réécrivant simplement CalculerValeur.

Actuellement la seule méthode que j'ai trouvé est de passer par un delegate, mais je trouve pas ça terrible. Ça m'oblige à réécrire le constructeur, mais je passe quand même une première fois dans CalculerValeur de A avant d'être écrasé par la fonction de B. Je ne trouve pas ça très propre.

Quel est la bonne méthode à utiliser ?
Voici le code que j'ai utilisé pour mes tests.

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
37
38
39
40
41
    class A
    {
        public delegate void Calculer(int i);
 
        protected int[] t;
        protected Calculer calculer;
 
        public A(int taille)
        {
            this.calculer = CalculerValeur;
            this.t = new int[taille];
            this.RemplirTab();
        }
 
        protected void RemplirTab()
        {
            for (int i = 0; i < t.Length; i++)
            {
                this.calculer(i);
            }
        }
 
        private void CalculerValeur(int i)
        {
            this.t[i] = i;
        }
 
        public override string ToString()
        {
            string s = "";
 
            foreach (int val in this.t)
            {
                if (s != "") s += "-";
                s += val.ToString();
            }
 
            s += $"[{t}]";
            return s;
        }
    }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
    class B: A
    {
        public B(int taille) : base(taille)
        {
            this.calculer = this.CalculerValeur;
            this.RemplirTab();
        }
 
        private void CalculerValeur(int i)
        {
            this.t[i] = i * 2;
        }
    }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
            A a = new A(10);
            B b = new B(10);
 
            Console.WriteLine(a.ToString());
            Console.WriteLine(b.ToString());
Merci de vos conseils.