Kako napraviti referencu na neki objekt u C#-u?
Trebao bi napraviti referencu na listu objekata korisnički definiranig razreda.
Guglanje nije dalo rezultata.
Kako napraviti referencu na neki objekt u C#-u?
Trebao bi napraviti referencu na listu objekata korisnički definiranig razreda.
Guglanje nije dalo rezultata.
pa ako imas listu ovako recimo:
List<KorisnickiDefRazred> lista = new List<KorisnickiDefRazred>();
Onda sve sto ti je potrebno je ovo:
List<KorisnickiDefRazred> referentnaLista = lista;
I sada ako budes menjao vrednost referentaLista mjenjaces i vrednosti originalne liste.
Uglavnom objekti koji se nalaze na Heapu tj. klase, kada ih pridruzujes sa znakom jedakosti kopira se samo referenca, a kada pridrizujes isto tako strukture onda se one kopiraju po vrijednosti, zato se i zovu klase Reference Type, a strukture Value Type.
isto tako mozes definirati metodu:
public void Metoda(List<KorisnickiDefRazred> lista);
i sada kada pozoves metodu i posaljes svoju listu kao argument
Metoda(lista);
svaka promjena te liste unutar metode ce rezultirati promjenom liste koju si poslao kao argument.
Eto to je to ako nesto ne shvacas ili nisam dobro objasnio samo pitaj..:D
Moraš precizirati što hoćeš, praktički sve je referenca u C#-u.
pa ako imas listu ovako recimo:
List<KorisnickiDefRazred> lista = new List<KorisnickiDefRazred>();
Onda sve sto ti je potrebno je ovo:
List<KorisnickiDefRazred> referentnaLista = lista;
I sada ako budes menjao vrednost referentaLista mjenjaces i vrednosti originalne liste.
Uglavnom objekti koji se nalaze na Heapu tj. klase, kada ih pridruzujes sa znakom jedakosti kopira se samo referenca, a kada pridrizujes isto tako strukture onda se one kopiraju po vrijednosti, zato se i zovu klase Reference Type, a strukture Value Type.
isto tako mozes definirati metodu:
public void Metoda(List<KorisnickiDefRazred> lista);
i sada kada pozoves metodu i posaljes svoju listu kao argument
Metoda(lista);
svaka promjena te liste unutar metode ce rezultirati promjenom liste koju si poslao kao argument.
Eto to je to ako nesto ne shvacas ili nisam dobro objasnio samo pitaj..:D
The hell?
To mi je netko prije trebao reći. Pa kakvog smisla ima da se kad se napiše nešto = nešto2 to onda znači da je nešto referenca na nešto 2.
Ovog u C++-u nije bilo. Mislim da sad znam što je uzrokovalo bug u jednom mojem programu.
Ah, nemožeš ni zamislit koliko ovo komplicira stvari. Moram promjeniti cjeli način razmišljanja. Čija je to, pobogu, glupa ideja bila...
Kako da napravim da se sve vrjednosti jednog objekta kopiraju u drugi?
Moraš precizirati što hoćeš, praktički sve je referenca u C#-u.
Čekaj malo, što sve? WTF...
Izraz
a = b
znači da varijabla a je isto što i varijabla b ako je tip od a i b klasa. Ako je struct, onda to radi što i C++ tj. kopira. Malo je nezgodno. Ali zapravo, kad malo bolje razmisliš, nije uopće trivijalno definirati što je gornji izraz u C++-u. To može biti:
Zato postoji ICloneable interface u C#u koji ne bi smio koristiti :D. Jednostavno implementiraj svoje operacije Clone ili tako nešto i onda znaš što je svrha operatora =.
Razlikuj u C# vrijednosne i referencne tipove.
struct Vrijednosni
{
int broj;
}
class Referencni
{
int broj;
}
Vrijednosni value = new Vrijednosni();
Referencni reference = new Referencni()
sada objekte instancirajmo dodjeljivanjm:
Vrijednosni noviValue = value;
Referencni noviRference = reference;
AKO objektima koje smo instancirali dodjeljivanjem pridružimo nove vrijednosti kako će se to odraziti na originalne objekte?
noviValue.broj = 5;
noviReference.broj = 5;
Rezultat će biti:
value.broj = 0;
noviValue.broj = 5;
reference.broj = 5;
noviReference.broj = 5;
Ovo moraš malo detaljnije proučiti u teoriji, pošto ima i side efekata - npr. vrijednosni tipovi koji sadržavaju referencne tipove,
dalje - vrijednosni i referencni tipovi kao parametri metoda, naredba ref i out.