[ vujkev @ 14.06.2007. 09:33 ] @
Dve klase

Code:

Class Class1
....
end Class

Class Class2
  Inherits Class1
....
end Class


Da li je moguće da od parent objekta dobijem child objekat?

Code:

Dim Parent as new Class1
Dim Child as Class2
Child = Parent ?????????????? znam da ne može ovako, ali da shvatite šta želim


Probao sam i da cast-ujem, tražio po netu, ... ali sve bez uspeha.

Hvala
[ aleksandarpopov @ 14.06.2007. 10:10 ] @
U C# mozes (za one tvoje dve klase i odnos medju njima) :

Code:

Class2 c2;
Class1 c1 = new Class1();
c2 = (c1 as Class1);

Sad kako ces ovo prekrojiti u VB nemam pojma :) (ako ti je ovo trebalo...)
[ bjevta @ 14.06.2007. 10:16 ] @
Pogledaj "is" i "as" C# operatore i primere vezane za njih.

[ mmix @ 14.06.2007. 13:06 ] @
Po njegovom primer bih rekao da to nije ono sto on hoce, po primeru izgleda da hoce da castuje instancu parent tipa u child tip. To ne moze, polimorfizam radi u obrnutom smeru...

c2 = (c1 as Class2) ce proci u kompajleru ali ce puci na prvoj primeni c2 sa "object not set to reference" a c2 = (Class2)c1 cast ce puci na samom castovanju.
[ vujkev @ 14.06.2007. 13:07 ] @
Pih, šteta Znači ostaje mi samo da prekopiram sve vrednosti iz parent-a u child. Sva sreća pa ih nema mnogo
[ mmix @ 14.06.2007. 13:21 ] @
Siguran sam da postoji i drugi nacin da se resi tvoj problem, samo sto nisam siguran da ti je postavka dobra cim moras da castujes u "naopakom" smeru. Sta zapravo pokusavas da postignes?
[ vujkev @ 14.06.2007. 13:38 ] @
Pa ovako, ukratko:

Parent klasa je klasa sa podacima o osobama (ime, adresa i sl.). U 90% slučajeva te podatke prikazujem u nekom gridu, listview-u i sl. U ostalih 10% potrebno je prikazati te osobe graficki (iscrtavam osobe preko Drawing namespace-a), pa mi je potrebno da pored svih tih podataka imam i pozicije X,Y, boja pozadine i sl. (sve što mi je potrebno za crtanje).

Po meni je logično da Parent bude klasa Person, a child DrawPerson.

Da li sam u pravu i da li ovo treba da se reši na drugačiji način?


EDIT:
Evo sad sam odvojio Person i DrawPerson tako da DrawPerson ne nasleđuje Person i u DrawPerson sam stavio
Code:

Dim _Person as Person
Public property Person as Person ....

i za sad radi.

I dalje me interesuje kako bi bilo najbolje rešiti ovaj problem


[Ovu poruku je menjao vujkev dana 14.06.2007. u 14:51 GMT+1]

[Ovu poruku je menjao vujkev dana 14.06.2007. u 14:51 GMT+1]
[ aleksandarpopov @ 14.06.2007. 14:06 ] @
@mmix
U pravu si... sad vidim sta sam napisao, imam slican kod koji cesto koristim - ali ipak je malo obrnut ;)
[ mmix @ 14.06.2007. 14:15 ] @
jedan od odgovora si upravo dao sam sebi i to tacno. Primer koji si naveo se zove "composition through ownership". Samo sto mislim da ti je opet smer vlasnistva naopak

Ako sam dobro shvati ti za sve osobe imas instancu klase Person, ali za neke od njih hoces da "prosiris" set informacija da ukljucuje i graficke informacije. Znaci da je osoba vlasnik svojih grafickih informacija, a ne da graficke informacije poseduju osobe.

Dakle, drugo resenje koje je mozda malo bolje od gornjeg, je da obrnes situaciju, kreiraj PersonGraphicalInfo klasu i dodaj polje GraphInfo tog tipa u Person klasu. Ostavi polje na null sem ako ti trebaju graficke infromacije u kom slucaju instanciras gornju klasu i upucas u Person.GraphInfo. Konzumer Person objekat koji razume GraphInfo i personGraphicalInfo lako moze da proveri da li ili ne taj Person ima informacije (null ili ne-null) i ako ih ima da ih iskoristi.

[ vujkev @ 14.06.2007. 14:29 ] @
OK hvala na odgovorima