Ik ben tijdens mijn opleiding veel in Java geprogrammeerd. als je daar een = operator gebruikt wordt een nieuwe verwijzing gelegd naar het object. Bijvoorbeeld:
object o1
object o2
o2 = 01;
Nu zijn o1 en o2 gelijk (ze wijzen naar hetzelfde objct).
Ik ben sinds een paar maanden in C# begonnen en merk dat het hier anders werkt. Om een referentie naar een bestaand object in de aanroep van een methode mee te geven gebruik je het REF(of out, maar dat terzijde) keyword. Maar hoe zit het nu met het java voorbeeld in het begin van me'n post ?
Ik heb namelijk onderstaande klasse:
Deze klasse krijgt in de constructor een referentie naar een Image object mee. Als de boolean cancelchanges true wordt(valt even buiten het voorbeeldje) wordt _img op null gezet.
Het probleem hierin is is dat _img (de klassevariable) in dit voorbeeld een kopie wordt van de in de constructor opgegeven img. Het principe in deze klasse werkt dus niet. Hierdoor weet de aanroepende instantie nooit dat "zijn" image op null wordt gezet.
Ik hoop dat ik een beetje duidelijk over kom. zo niet zal ik eea proberen te verduidelijken.
object o1
object o2
o2 = 01;
Nu zijn o1 en o2 gelijk (ze wijzen naar hetzelfde objct).
Ik ben sinds een paar maanden in C# begonnen en merk dat het hier anders werkt. Om een referentie naar een bestaand object in de aanroep van een methode mee te geven gebruik je het REF(of out, maar dat terzijde) keyword. Maar hoe zit het nu met het java voorbeeld in het begin van me'n post ?
Ik heb namelijk onderstaande klasse:
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
| public partial class Imagemasking_window : Form { //class vars: Image _img; Boolean cancelchanges = true; public Imagemasking_window(ref Image img) { InitializeComponent(); _img = img pictureBox1.Image = _img; } private void button1_Click(object sender, EventArgs e) { cancelchanges = false; this.Close(); } private void Imagemasking_window_FormClosing(object sender, FormClosingEventArgs e) { if (!cancelchanges) { _img = pictureBox1.Image; } else { _img = null; } } } |
Deze klasse krijgt in de constructor een referentie naar een Image object mee. Als de boolean cancelchanges true wordt(valt even buiten het voorbeeldje) wordt _img op null gezet.
Het probleem hierin is is dat _img (de klassevariable) in dit voorbeeld een kopie wordt van de in de constructor opgegeven img. Het principe in deze klasse werkt dus niet. Hierdoor weet de aanroepende instantie nooit dat "zijn" image op null wordt gezet.
Ik hoop dat ik een beetje duidelijk over kom. zo niet zal ik eea proberen te verduidelijken.
Specs: 9800X3D, RTX 5090, 64GB, VR: Pimax Crystal-Light