Bonjour,

Je viens de tomber sur une réaction plutôt bizarre de mon code.

Soit 2 classes :

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
class TableauGest
{
    public int[,] board;
 
    public TableauGest(int dimensionX, int dimensionY)
    {
        board = new int[dimensionX, dimensionY];
        for (int i = 0; i < dimensionX; i++)
        {
            for (int j = 0; j < dimensionY; j++)
            {
                board[i, j] = 0;
            }
        }
    }
 
    //diverses autres fonction pour gérer le tableau
}
 
class TableauCalc
{
    public void AjouterValeur(TableauGest tableau)
    {
        tableau.board[2, 3] = 4;
    }
}
Les chiffres et fonctions sont fictives bien évidement, mais le fonctionnement est le même que dans mon projet.

Donc avec ces deux classes, si dans mon main je fait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
TableauGest testTableauGest = new TableauGest(5 , 6);
TableauCalc testTableauCalc = new TableauCalc();
testTableauCalc.AjouterValeur(testTableauGest);
Là, à mon grand étonnement, la valeur de testTableauGest.board[2, 3] est changée pour 4 .

Hors, vu que n'utilise pas le mot clé ref, la valeur du tableau d'origine ne devrait pas être changée, si?

Donc, mon but, est de faire en sorte que le tableau testTableauGest du main() ne soit pas modifié par la fonction testTableauCalc.AjouterValeur(). Avez vous une idée du problème?

Moi qui croyais avoir appréhendé la notion de référence en C#, me voilà tout perdu