Ik had voor mijn gevoel redelijk duidelijk hoe het met references zit maar ik loop toch tegen iets aan.
Als ik een variabele heb gedefinieerd op niveau x en ik wijzig de variabele op niveau y dan krijg ik op niveau x de wijziging weer te zien. Perfect want dit is ook precies wat ik wil. Alleen wanneer ik op niveau x de variabele aanmaak en een nieuwe instantie op niveau y er over heen zet, dan krijg ik deze nieuwe instantie niet op niveau x te zien. Ik begrijp niet goed waarom omdat ik dacht dat de waarde van de reference gewoon overschreven werd, maar het lijkt wel dat hij op niveau y een gehele nieuwe geheugen locatie krijgt toegewezen.
Ik heb onderstaande test aangemaakt om het één en ander te verduidelijken. Iemand enig idee waar mijn gedachten verkeerd gaan?
Hier onder de output.
Ik zou verwachten dat de laatste regel "CandidateID: 20" zou worden.
Als ik een variabele heb gedefinieerd op niveau x en ik wijzig de variabele op niveau y dan krijg ik op niveau x de wijziging weer te zien. Perfect want dit is ook precies wat ik wil. Alleen wanneer ik op niveau x de variabele aanmaak en een nieuwe instantie op niveau y er over heen zet, dan krijg ik deze nieuwe instantie niet op niveau x te zien. Ik begrijp niet goed waarom omdat ik dacht dat de waarde van de reference gewoon overschreven werd, maar het lijkt wel dat hij op niveau y een gehele nieuwe geheugen locatie krijgt toegewezen.
Ik heb onderstaande test aangemaakt om het één en ander te verduidelijken. Iemand enig idee waar mijn gedachten verkeerd gaan?
code:
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
| using System; using System.Collections.Generic; using System.Text; namespace ReferenceTest { class Program { static void Main(string[] args) { Candidate candidate = new Candidate(10); Console.WriteLine("CandidateID: " + candidate.ID); ReferenceTest test = new ReferenceTest(candidate); test.ChangeCurrentInstanceCandidateID(15); Console.WriteLine("CandidateID: " + candidate.ID); test.ChangeNewInstanceCandidateID(20); Console.WriteLine("CandidateID: " + candidate.ID); Console.WriteLine("Press any key to quit"); Console.ReadKey(); } } public class Candidate { private int id; public int ID { get { return id; } set { id = value; } } public Candidate(int id) { this.id = id; } } public class ReferenceTest { private Candidate candidate; public ReferenceTest(Candidate candidate) { this.candidate = candidate; } public void ChangeCurrentInstanceCandidateID(int id) { this.candidate.ID = id; } public void ChangeNewInstanceCandidateID(int id) { this.candidate = new Candidate(id); } } } |
Hier onder de output.
code:
1
2
3
4
| CandidateID: 10 CandidateID: 15 CandidateID: 15 Press any key to quit |
Ik zou verwachten dat de laatste regel "CandidateID: 20" zou worden.
PSN: Norfirin