Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 12 odgovora
  • 6.464 pregleda

Najnovija ↓

[reseno] dinamichko instanciranje klase 09.06.2007. u 20:45 · pre 236 meseci
izmenjeno 1 put, poslednji put cucciolo 12.06.2007. u 17:08
  1. cucciolo12.06.2007. u 17:08zapis iz teksta poruke
#1
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
Re: [pomoc] dinamichko instanciranje klase 10.06.2007. u 05:52 · pre 236 meseci #2



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".
Re: [pomoc] dinamichko instanciranje klase 10.06.2007. u 21:50 · pre 236 meseci #4
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 ?
Re: [pomoc] dinamichko instanciranje klase 11.06.2007. u 12:26 · pre 236 meseci #5
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
Re: [pomoc] dinamichko instanciranje klase 11.06.2007. u 15:09 · pre 236 meseci #6
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...
Re: [pomoc] dinamichko instanciranje klase 11.06.2007. u 16:01 · pre 236 meseci #7
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,.,.
Re: [pomoc] dinamichko instanciranje klase 11.06.2007. u 18:03 · pre 236 meseci #8
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... ;)
Re: [reseno] dinamichko instanciranje klase 12.06.2007. u 18:20 · pre 236 meseci #9
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.
Potpis
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ć
Re: [reseno] dinamichko instanciranje klase 13.06.2007. u 12:07 · pre 236 meseci #10
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 ?


Re: [reseno] dinamichko instanciranje klase 13.06.2007. u 14:50 · pre 236 meseci #11
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.

Potpis
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ć
Re: [reseno] dinamichko instanciranje klase 13.06.2007. u 15:46 · pre 236 meseci #12
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
Re: [reseno] dinamichko instanciranje klase 14.06.2007. u 14:31 · pre 236 meseci #13
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...
Potpis
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ć
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme