Diskuze: Změna hodnoty proměnné se kterou se nepracuje

C# .NET .NET (C# a Visual Basic) Změna hodnoty proměnné se kterou se nepracuje American English version English version

Avatar
Lu Kiss
Člen
Avatar
Lu Kiss:

Ahoj, setkal jsem se s problémem který je pro mne absolutně španělskou vesnicí.
Mám třídu A v ní protected atribut typu pole charů (aphabet) a v něm znaky abecedy. Třída B dědí z A a má atribut substitution (též pole charů), do kterého je přiřazena proměnná alphabet. Poté udělám algortmus nad substitution a teď ta záhadná věc. Jak je možné že ačkoli s alphabet nepracuji, tak je její obsah roven substitution? Předem děkuji za vystvětlení.

this.substitution = this.alphabet;
            Random rnd = new Random();
            for (int i = 0; i < this.substitution.Length; i++)
            {
                int j = rnd.Next(0, this.substitution.Length);
                char temp = this.substitution[i];
                this.substitution[i] = this.substitution[j];
                this.substitution[j] = temp;
            }

P.S. doufám že řešení nebude nějaká triviální blbost, to by mě fakt jeblo :DD

 
Odpovědět 9.10.2015 20:58
Avatar
Odpovídá na Lu Kiss
Libor Šimo (libcosenior):

Nebude to tym, ze substitution = alphabet (obidva ukazuju na to iste miesto v pamati)? Teda ked zmenis jedno, zmeni sa aj druhe.

Nahoru Odpovědět  +2 9.10.2015 21:07
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Lu Kiss
Jan Vargovský:

Odpověď na tohle najdeš v každém tutoriálu, který se dostal za "hello world". Pole jsou v C# referenční typ. To znamená tohle:

var a = {'a', 'a'};
var b = a;
b[0] = 'b';

a == b == {'b', 'a'}

a nemusel jsem vůbec sáhnout na pole a, ale i tak je na 0. indexu znak b.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 9.10.2015 21:07
Avatar
Lu Kiss
Člen
Avatar
Lu Kiss:

díky :) vyřešil jsem to přesně jak je psáno v tutoriálu přes metody Copy třídy Array

 
Nahoru Odpovědět 9.10.2015 21:19
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.