Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Prosledjivanje reference (upucivaca)

[es] :: .NET :: Prosledjivanje reference (upucivaca)

Strane: 1 2

[ Pregleda: 8337 | Odgovora: 28 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Zevs85
Zeljko Todorovic
Novi Sad, Sabac

Član broj: 24612
Poruke: 325
*.vdial.verat.net.



+21 Profil

icon Prosledjivanje reference (upucivaca)17.09.2006. u 23:39 - pre 213 meseci
c#.NET
Pitanje, hocu da posaljem referencu (npr objekta RichTextBoxa) nekoj funkciji i da ta funkcija izvrsi upis u RTB, kako?
Sta treba da pise u deklaraciji funkcije i kako treba da je definisem...?

btw: Jel postoji u C# rad sa pokazivacima? Kako bi ovaj problem od gore uradio putem pokazivaca?

Hvala...!
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: Prosledjivanje reference (upucivaca)17.09.2006. u 23:51 - pre 213 meseci
Postoje pointeri u C# u okviru unsafe bloka ali za ovaj tvoj problem nema potrebe za tim. Ako bas hoces da prosledis bilo sta funkciji uvek mozes da stavis da ti je tip argumenta koji prosledjujes object. Konkretno za tvoj problem stavi da ti je tip argumenta RichTextBox i moci ces samo da prosledjujes objekte klase RichTextBox-a.

Code:

void SomeMethod(RichTextBox rtBox)


Pogledaj i starije teme o tipovima podatka. Neki su vec lepo opisali kako se objekti alociraju i prosledjuju.
 
Odgovor na temu

Zevs85
Zeljko Todorovic
Novi Sad, Sabac

Član broj: 24612
Poruke: 325
*.vdial.verat.net.



+21 Profil

icon Re: Prosledjivanje reference (upucivaca)18.09.2006. u 00:35 - pre 213 meseci
Plasim se da me nisi razumeo...
Ja hocu da izvrsim upis u RichTextBox, npr

Code:

void SomeMethod([b]RichTextBox rtBox[/b]){

rtBox.text = "neki tekst";
.
.
rtBox.text = "n-ti tekst";
}


To pozivem iz glavnog programa koji na sebi ima RTB i u njemu zelim upis.

Napomena: Ovaj bold tekst me konkretno zanima. Sta treba da napisem da bi radilo?

Citat:
negyxo:
Pogledaj i starije teme o tipovima podatka. Neki su vec lepo opisali kako se objekti alociraju i prosledjuju.

Ne mogu da nadjem....
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: Prosledjivanje reference (upucivaca)18.09.2006. u 01:08 - pre 213 meseci
I ja se plasim da te nisam razumeo, u stvari plasim se da te i dalje nisam razumeo

Probaj prvo. A ako to nije to onda bojim se da zaista ne razumem.

Starija tema: http://www.elitesecurity.org/t172066-0#1118871
 
Odgovor na temu

dusty
Predrag Glumac
Zemun, Srbija

Član broj: 15383
Poruke: 549
213.137.127.*

Sajt: www.mika.rs


+6 Profil

icon Re: Prosledjivanje reference (upucivaca)18.09.2006. u 05:53 - pre 213 meseci
Da bi 'preneo' neki objekat po referenci u metodu koristi se kljucna rec ref. Naravno, po referenci mogu da se prenesu samo referencijalni tipovi, u protivnom moras da radis boxing.

Code:

public void MyMethod(ref RichTextBox rtb){..........}

.
.
.
this.MyMethod(ref myRichBox);
.
.
.


Slicno se ponasa i out, stim da objekat ne mora da bude instanciran pre poziva metode, vec se pravi nova instanca unutar metode.
America national sport is called baseballs. It very similar to our sport, shurik, where we take dogs, shoot them in a field and then have a party.
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: Prosledjivanje reference (upucivaca)18.09.2006. u 09:35 - pre 213 meseci
Citat:
dusty: Da bi 'preneo' neki objekat po referenci u metodu koristi se kljucna rec ref. Naravno, po referenci mogu da se prenesu samo referencijalni tipovi, u protivnom moras da radis boxing.


Referencijalni tipovi vec se prosledjuju preko reference. Koristiti ref za referencijalne tipove ima smisla jedino ako ce funkcija da koristi new operator nad tim argumentom. Sa ovim treba biti obazriv. Recimo, u ovom Zevs85-om problemu koristiti new operator unutar funkcije za RichTextBox koji je vec inicijalizovan i verovatno vec u nekoj controls kolekciji, moze dovesti samo do kreiranja novog RichTextBox-a koji nece referencirati onom u controls kolekciji.
ref je, koliko sam ja shvatio, najvise namenjen bas za value tipove. Boxing nema veze sad sa ovim. Boxing se radi - radi toga da bi objekat presao iz value tipa u object tip, recimo int se prevodi u object.

Citat:

negyxo: Ako bas hoces da prosledis bilo sta funkciji uvek mozes da stavis da ti je tip argumenta koji prosledjujes object.


Da ispravim sebe. Znaci stavljati da ti je tip object kojem ce se vrednost izmeniti unutar funkcije ima smisla samo nad reference types. Za value types koristiti ref ili out.
 
Odgovor na temu

Dejan Vesic
Dejan Vesic
CEO
IGT Ogranak Beograd
Beograd

Član broj: 84929
Poruke: 217
82.117.193.*

Sajt: www.vesic.org


+1 Profil

icon Re: Prosledjivanje reference (upucivaca)18.09.2006. u 09:55 - pre 213 meseci

Ovde je mnogo što šta pomešano :-S

- koristi ref kada izmenu radiš nad postojećim objektom (recimo kontrolom)
- koristi out kada šalješ referencu nad tek definisanim objektom

I to je to.
 
Odgovor na temu

dusty
Predrag Glumac
Zemun, Srbija

Član broj: 15383
Poruke: 549
*.ptt.yu.

Sajt: www.mika.rs


+6 Profil

icon Re: Prosledjivanje reference (upucivaca)18.09.2006. u 11:13 - pre 213 meseci
Da, pogresio sam za value type.

Citat:
Referencijalni tipovi vec se prosledjuju preko reference


Da, ali se na stek ne stavlja referenca na objekat ako se ne koristi ref.

Citat:
Koristiti ref za referencijalne tipove ima smisla jedino ako ce funkcija da koristi new operator nad tim argumentom


Ovo nema smisla To je samo sintaksa. Ako se koristi new nekog tipa kao argument, JIT ce prvo da kreira objekat, pa ce da ga stavi na stek i pozove metodu. Samo ce da ti ustedi da ne moras da radis nekiObj obj = new nekiObj(); metoda(ref obj);.
America national sport is called baseballs. It very similar to our sport, shurik, where we take dogs, shoot them in a field and then have a party.
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: Prosledjivanje reference (upucivaca)18.09.2006. u 11:49 - pre 213 meseci
Citat:

Da, ali se na stek ne stavlja referenca na objekat ako se ne koristi /ref/.


To, znam. Zato sam i napisao da ima smisla koristiti jedino ako ce funkcija da koristi new operator nad tim argumentom

Code:

void SomeMethod(ref MyClass mc)
{
    mc = new MyClass();
    ...
}


A pretostavljam da si ti mislio na ovo kod poziva funkcije

Code:

SomeMethod(ref new MyClass())


Sto ti nece ni proci jer ces dobiti compile time error.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Prosledjivanje reference18.09.2006. u 11:57 - pre 213 meseci
Ajoj. "upucivac", gde si to pokupio?


Dalje, Nemo se ljutite, ali ja ne mogu da verujem koliko vas je zbunjeno oko ove veoma osnovne stvari.

1. Svi tipovi u .NETu su ili value ili reference (string je reference), ako niste sigurni koji je tip, verovatno je referentni

2. Svi reference tipovi se prosledjuju kao pointeri (type*). Tacka. .NET NIKAD nece napraviti kopiju objekta na steku pri formiranju stvarnih parametara (ali NIKAD), ni kao obican, ni kao ref ni kao out parametar.

3. Svi value tipovi se prosledjuju kopiranjem na stek sem kad su ref i out.

4. Ref parametar oznacava "pointer na". Posto je reference tip vec pointer, to znaci da se (ref TextBox x) prosledjuje kao pointer na pointer na objekat X (TextBox**). Jedini razlog da se ovo koristi je da bi promenila sama referenca u pozivnom kodu:

Code:


...
object x = new object();
PoRef(ref x);
// ovde x vise nije onaj koji je kreiran u konstruktoru
...

void PoRef(ref object x)
{
   x = new object();
}


5. Ako hoces da menjas interno stanje objekta, ne treba da koristis ref parametre. Posto vec dobijas referencu po defaultu mozes da joj menjas interno stanje i ta promena ce ostati nakon povratka iz tela metoda.
6. ref na value type je dozvoljen i time se kompajler forsira da kreira pointer na value type. Proces je u pozadini isti kao proces boxovanja, ali je ovo "boxovanje" implicitno kao sto je i "unboxovanje" u telu funkcije implicitno, u prevodu potpuno transparentno. Iako radis sa pointerom na value type, sors kod je isti, kompajler je taj koji pravi razliku.

Znaci ref ne koristis kad radis izmenu NAD objektom, ref koristis kad radis ZAMENU objekta, out radis kad funkcija treba da vrati vise od jednog rezultata pa sam return value nije dovoljan. Princip out je isti kao princip za ref samo sto kompajler nece izbaciti warning ako stvarni parametar nije kreiran (pointer na null value je dozvoljen kao stvarni parametar).

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Zevs85
Zeljko Todorovic
Novi Sad, Sabac

Član broj: 24612
Poruke: 325
213.244.197.*



+21 Profil

icon Re: Prosledjivanje reference (upucivaca)18.09.2006. u 15:39 - pre 213 meseci
@mmix
Citat:
Ajoj. "upucivac", gde si to pokupio?


Znas kako, tesko pitanje :), mislim da je jedna od Krausovih knjiga ili posledica nekih predavanja vezanih za objektno programiranje. Mada, sve u svemu, nazvao bi ih sinonimima, pa sam iz tog razloga naveo oba.

Citat:
Dalje, Nemo se ljutite, ali ja ne mogu da verujem koliko vas je zbunjeno oko ove veoma osnovne stvari.

Ja sam u .NET-u, konkretno C# toliko svez da se jos dimim :) pre manje od mesec dana sam poceo. Radio sam c++, tako da sam se oko vecine stvari relativno lako uklopio, mada vidis ima problema sa osnovnim stvarima.

@All

Mnoge stvari su mi jasnije, VELIKO HVALA. Inace proradilo je ;)
 
Odgovor na temu

Zevs85
Zeljko Todorovic
Novi Sad, Sabac

Član broj: 24612
Poruke: 325
213.244.197.*



+21 Profil

icon Re: Prosledjivanje reference (upucivaca)18.09.2006. u 15:43 - pre 213 meseci
Ne znam da li da otvaram novu temu ili jednostavno da pitam ovde...
U c++u napraviti dinamicku listu (jednostruku) je bilo boza. Sintaksa koja je tamo palila ovde mi nesto ne prolazi (naravno sa izmenama). Gde bih mogao naci neki tutorijal ili osnovni primer, sta, kako...?

btw: Ima veze sa pokazivacima ;) bar je imalo u c++u
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Prosledjivanje reference (upucivaca)18.09.2006. u 17:34 - pre 213 meseci
Citat:
Zevs85: Ja sam u .NET-u, konkretno C# toliko svez da se jos dimim pre manje od mesec dana sam poceo. Radio sam c++, tako da sam se oko vecine stvari relativno lako uklopio, mada vidis ima problema sa osnovnim stvarima.


To da si radio u C++-u se vidi iz aviona, i nisi prvi, ima nas dosta. C++ programerima treba dugo dugo da savladaju sve vestine vezane za pointere i cemu bi konkretno mogao da posluzi pointer na pointer na pointer . Takodje, C++ ima monolitni kompajler koji (ako izuzmemo pragme) prevodi na osnovu sintakse i nije vezan za nijednu konkretnu biblioteku . C# (.NET generalno) su doneli tu promenu da kompajler ne zavisi samo od koda, nego i od toga koje se klase u kodu koriste (sto je varanje ako mene pitate ). To je C++ programerima donelo najvise glavobolje, da alokacija, instanciranje i prosledjivanje razlicito radi za razlicitim tipovima bez eksplicitne instrukcije programera.

Citat:
Zevs85: Ne znam da li da otvaram novu temu ili jednostavno da pitam ovde...
U c++u napraviti dinamicku listu (jednostruku) je bilo boza. Sintaksa koja je tamo palila ovde mi nesto ne prolazi (naravno sa izmenama). Gde bih mogao naci neki tutorijal ili osnovni primer, sta, kako...?
btw: Ima veze sa pokazivacima bar je imalo u c++u


Ima jos uvek. Samo se opusti i zaboravi na * i -> Kad deklarises sledeci clan niza, deklarisi ga kao polje, kompajler ce ga tretirati kao referencu (pointer):

Code:


public class Element 
{
    ...
    public Element Next;
}


Ako samo hoces da koristis uvezanu listu imas vec gotove implementacije u System.Collection i System.Collection.Generics
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
217.169.219.*

Jabber: DarkMan


Profil

icon Re: Prosledjivanje reference (upucivaca)18.09.2006. u 19:52 - pre 213 meseci
Citat:
mmix:
1. Svi tipovi u .NETu su ili value ili reference (string je reference), ako niste sigurni koji je tip, verovatno je referentni :)


Nisam radio u c++ .NET (ili c++/cli) pa ne znam da li je tamo string value ili reference ali u c# string je value type. Da bi metoda mogla napraviti izmenu string parametra, taj parametar se explicitno mora proslediti sa ref.

 
Odgovor na temu

Zevs85
Zeljko Todorovic
Novi Sad, Sabac

Član broj: 24612
Poruke: 325
*.vdial.verat.net.



+21 Profil

icon Re: Prosledjivanje reference (upucivaca)18.09.2006. u 20:10 - pre 213 meseci
@mmix
Citat:
C++ programerima treba dugo dugo da savladaju sve vestine vezane za pointere i cemu bi konkretno mogao da posluzi pointer na pointer na pointer .

Nadam se da se ovaj kontekst odnosi na c# ne na c++?! Obzirom da pricu oko pokazivaca i pokazivaca na pokazivac mi je kristalno jasna i istko tako jasno vidljiva u c++u. Ovde imam problem sto sam preskocio prvih par koraka, tacnije napravio sam dvokorak i bas se zbog toga gubim.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.lionbridge.com.



+6 Profil

icon Re: Prosledjivanje reference (upucivaca)18.09.2006. u 20:25 - pre 213 meseci
Citat:
DarkMan: ali u c# string je value type


String je u svim .NET jezicima reference type. U stvari, to i nije definisano na nivou jezika, već na nivou CLRa.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Prosledjivanje reference (upucivaca)18.09.2006. u 21:14 - pre 213 meseci
Citat:
DarkMan: Nisam radio u c++ .NET (ili c++/cli) pa ne znam da li je tamo string value ili reference ali u c# string je value type. Da bi metoda mogla napraviti izmenu string parametra, taj parametar se explicitno mora proslediti sa ref.


Kao sto ti rece DragiTata, nisi u pravu. Vecina ljudi se upeca na string, zato sam specijalno to i naglasio. Ono sto pravi problem je sto vecina string operacija zapravo pravi novi string na heap-u i onda vrati "referencu" u varijablu, i ta referenca se naravno ne vrati u pozivni kod i stice se utisak da je string value type jer se nije promenio. Ako npr. unutar metode promenis prvi karakter stringa sa "a" na "b" videces da ce se promena reflektovati u pozivnom kodu...

Code:

public void Met(string xx)
{
// ova promena ce se videti
xx[0] = "a";

// ova promena u xx ubacuje novu referencu (pointer) i ovo se ne vraca
xx = "aasafa";

// ovo takodje generise novu referencu
xx = xx.Replace("a", "x");
}



Citat:
Zevs85:Nadam se da se ovaj kontekst odnosi na c# ne na c++?! Obzirom da pricu oko pokazivaca i pokazivaca na pokazivac mi je kristalno jasna i istko tako jasno vidljiva u c++u. Ovde imam problem sto sam preskocio prvih par koraka, tacnije napravio sam dvokorak i bas se zbog toga gubim.


Ako mislis na int***, mislio sam na C++ ;) Prosto i jednostavno, 3D matrica za sadomazohiste :) Ako to savladas, C++ pointeri su tvoji prijatelji :)

ja koliko znam, takva konstrukcija nije podrzana u CLR-u (postoje 3d matrice naravno, ali pointer na pointer na pointer, to ne :))

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

NrmMyth
Ivan Maček
Split

Član broj: 63456
Poruke: 849
*.cmu.carnet.hr.

Sajt: www.dump.hr


Profil

icon Re: Prosledjivanje reference (upucivaca)18.09.2006. u 21:34 - pre 213 meseci
Citat:
mmix:
Code:
// ova promena ce se videti
xx[0] = "a";

Nije mi pri ruci C#, ni C++/CLI kompajler pa moram pitati.
Zar System::String nije immutable?
 
Odgovor na temu

radoica

Član broj: 12972
Poruke: 158
*.yubc.net.



+3 Profil

icon Re: Prosledjivanje reference (upucivaca)18.09.2006. u 22:02 - pre 213 meseci
Immutable je.

A string is a sequential collection of Unicode characters that is used to represent text. A String object is a sequential collection of System.Char objects that represent a string. The value of the String object is the content of the sequential collection, and that value is immutable.

A String object is called immutable (read-only) because its value cannot be modified once it has been created. Methods that appear to modify a String object actually return a new String object that contains the modification. If it is necessary to modify the actual contents of a string-like object, use the System.Text.StringBuilder class.

 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Prosledjivanje reference (upucivaca)19.09.2006. u 12:12 - pre 213 meseci
Citat:
NrmMyth: Nije mi pri ruci C#, ni C++/CLI kompajler pa moram pitati.
Zar System::String nije immutable?


Jeste, vidim da sam uneo jos vise zabune sad, izvinjavam se. Kod je samo trebao da pokaze da je string referentni tip i da kojim slucajem default indexer ima set :) promenio bi se string u pozivnom kodu...


Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

[es] :: .NET :: Prosledjivanje reference (upucivaca)

Strane: 1 2

[ Pregleda: 8337 | Odgovora: 28 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.