|
[ cucciolo @ 09.06.2007. 19:45 ] @
| Hocu da napravim dinamichko instanciranje klase.,. naime ukoliko mi se prosledi samo string koji sadrzi naziv klase, da li mogu na osnovu tog stringa da instanciram objekat, znachi da kazem nekako ovako :
Code:
//Student je ujedno i neka definisana klasa
string klasa="Student";
klasa objekat=new klasa();
//znam da ovo nije nikako dobro napisano, ali samo da objasnim shta hocu ili ako onda klasa postane
string klasa="Radnik";
klasa objekat=new klasa();
// i da mi napravi objekat od klase radnik
valjda sam jasan
pozz
[Ovu poruku je menjao cucciolo dana 12.06.2007. u 17:08 GMT+1] |
[ Igor Gajic @ 10.06.2007. 04:52 ] @
Otprilike to se radi preko jedne klase koja se naziva "class factory".
Ta klasa bi trebalo da ima metod:
object CreateClass(string ime_klase)
koja preuzima naziv klase, zatim u f-ji definises jedan switch koji ce na osnovu
prosledjenog imena da generise trazenu klasu.
Otprilike:
if(ime_klase=="student") return new Student();
if(ime_klase=="radnik") return new Radnik();
Nadam se da sam bio dovoljno jasan.
P.S. Proguglaj na internetu o "class factory".
[ aleksandarpopov @ 10.06.2007. 09:13 ] @
Pogledaj u helpu Activator.CreateInstance a i bila je tema ovde nedavno...
[ cucciolo @ 10.06.2007. 20:50 ] @
ako sam dobro shvatio trebao bih da napishem neshto ovako
Code:
object o=Activator.CreateInstance(Type.GetType("Student"));
o.NekaMetoda();
samo shto mi on to ne istancira najbolje, pregledao sam i prethodne teme nije mi bash taj deo povezivanja sa navedenom instancom najasniji,., da je povezem preko object ,,. ili drugachije ?
[ cucciolo @ 11.06.2007. 11:26 ] @
ok radi sve,. mada mi prvo prijavljuje da object "o" nema neku metodu koju pozivam jer je ne vidi, logichno, jer ce tek u runTime-u postati konkretni objekat neke klase,.,
hvala puno
[ Radudzoni @ 11.06.2007. 14:09 ] @
He he...
Citat: samo shto mi on to ne istancira najbolje
Kako to instancira "nenajbolje"? (mozda prostoji neki parametar da mu prosledis InstancirajNajbolje = true/false ;-)
uzgred moraces to da kastujes u odgovarajuci tip da bi mogao da pozoves metodu te klase...
[ cucciolo @ 11.06.2007. 15:01 ] @
xaxxaax,. da e za metode sam napravio sledece i radi lepo
Code:
public object napravi(ref object obj,string nazivKlase)
{
obj=Activator.CreateInstance(Type.GetType(nazivKlase));
return obj;
}
public object izvrshiMetodu(object obj, string nazivMetode, object[] parametri)
{
Type tipObjekta=obj.GetType();
object result=tipObjekta.InvokeMember(nazivMetode,BindingFlags.InvokeMethod,null,obj,parametri);
return result;
}
tako da preko prve funkcije inicijalizujem objekat, a preko druge pozovem metodu,.,.
[ jablan @ 11.06.2007. 17:03 ] @
Samo pripazi da ne preteraš sa refleksijom (stvari koje možeš da rešiš bez, reši bez). Znaš onu poslovicu: kad imaš čekić onda ti sve liči na ekser... ;)
[ mmix @ 12.06.2007. 17:20 ] @
Slazem se sa jablanom, mozda ti to resenje i nije najbolje jer je refleksija uglavnom podlozna posebnim security permissions dozvolama i lako mozes da utrcis u situaciju da ti refleksija bude iskljucena (neki ISPovi npr ne dozvoljavaju refleksiju u asp.net aplikacijama).
Ako imas konacan broja klasa o kojima pitas onda poslusaj Igora i implementiraj "class factory" pattern. U kombinaciji sa polimorfizmom ovaj pristup je dovoljno mocan da ti resi vecinu projektnih zahteva ako ne sve.
[ cucciolo @ 13.06.2007. 11:07 ] @
da da gledao sam i class factory pattern i naravno razlichite nachine implementacije istog,. ali mozda je refleksija bolje reshenje ako radim sa remotingom i ne znam shat me ochekuje na drugoj strani, mislim na klase,.,. ,.
ali svakako sam pogledao i jedno i drugo.. hvala puno za savete
a zashto onemogucavaju refleksiju ISP-ovi ?,. security ?
[ mmix @ 13.06.2007. 13:50 ] @
Citat: cucciolo: da da gledao sam i class factory pattern i naravno razlichite nachine implementacije istog,. ali mozda je refleksija bolje reshenje ako radim sa remotingom i ne znam shat me ochekuje na drugoj strani, mislim na klase
a zashto onemogucavaju refleksiju ISP-ovi ?,. security ?
Vise zastita drugih korisnika shared servera, refleksija ti omogucava dinamicko bindovanje na assemblije van sopstvenog manifesta i otkrivanje private detalja tipova u njima, spika je da to teorijski omogucava otkrivanje poslovnih tajni konkurenciji. Iskreno ja ne kupujem tu ideju, ako mozes da se bindujes na asembli mozes onda i da ga downloadujes preko svog sajt i da ga onda seciras na miru kuci  Al razum slabo ima veze sa danasnjim informacionim sistemima.
Al moram priznati da si me zbunio sad, sta ce ti refleksija (ili class factory pattern) za remoting, remoting je sam vec baziran na refleksiji i sam instancira tipove koji se "setaju". I definitivno obe strane moraju da imaju deklarisane tipove koji se setaju, ne mozes poslati anonymous tip ako druga strana ne zna kako da ga deserijalizuje, a ako zna da deserijalizuje onda je instanca vec kreirana.
[ cucciolo @ 13.06.2007. 14:46 ] @
Citat:
Al moram priznati da si me zbunio sad, sta ce ti refleksija (ili class factory pattern) za remoting, remoting je sam vec baziran na refleksiji i sam instancira tipove koji se "setaju". I definitivno obe strane moraju da imaju deklarisane tipove koji se setaju, ne mozes poslati anonymous tip ako druga strana ne zna kako da ga deserijalizuje, a ako zna da deserijalizuje onda je instanca vec kreirana.
,.exex to je moje ne znanje,. nemoj se zbunjivati, nisam radio sa Remotingom unutar .NET-a, radio sam sa PHP-ASom (AMFPHP) , lichno sam mislio da je moguce povezovanje i mapiranje klasa, koje dobijesh u run-timeu u C# , nisam stigao josh da chitam o tome poshto sam neke druge stvari radio.,,. ali super,. sada znam da moram da navedem klase koje su u opticaju
hvala puno za objashnjenje
[ mmix @ 14.06.2007. 13:31 ] @
Pazi ti mozes da deklarises parametar metoda kao object i da dinamicki "otkrivas" elemente tipa objekta koji ti se prosledi, ali ne vidim kako bi to mogao da iskoristis van application domain-a u kojem si, tj kroz raznorazne remoting sisteme jer da bi objekat postojao mora da se instancira unutar application domaina. Mozda ako bi tacno objasnio sta zelis da napravis mogli bi da ti damo neke savete...
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|