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

Instanciranje klase preko njenog imena

[es] :: .NET :: Instanciranje klase preko njenog imena

[ Pregleda: 4353 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Radudzoni
Radoslav Jovanovic
Beograd

Član broj: 8384
Poruke: 133
*.ptt.yu.



Profil

icon Instanciranje klase preko njenog imena03.09.2006. u 16:13 - pre 213 meseci
Jel moze u C#.NET - u da se instancira klasa preko njenog naziva... Dakle u namespace-u imam nekoliko klasa i u runtimeu znam naziv klase ciji objekat treba da kreiram i hocu da ga kreiram preko tog naziva...
Znam da bih mogao da napravim metodu koja ce mi vracati instance klase na osnovu prosledjenog naziva ali bih da izbegnem to resenje... A znam da u Javi postoji nacin da se klasa instancira preko imena, pa pretpostavljam da nesto tako meze da se uradi i u C#, mozda pomocu refleksije...

Pozdav.
 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
*.dynamic.sbb.co.yu.

Jabber: DarkMan


Profil

icon Re: Instanciranje klase preko njenog imena03.09.2006. u 19:53 - pre 213 meseci
Evo ti jedan primer za instanciranje forme:
Code:

                Form form = (Form)Activator.CreateInstance(Type.GetType("FormMain"));
 
Odgovor na temu

spartak

Član broj: 5625
Poruke: 631
*.ptt.yu.



+3 Profil

icon Re: Instanciranje klase preko njenog imena04.09.2006. u 00:47 - pre 213 meseci
Code:

  MojaKlasa mojObjekat = new MojaKlasa();
 
Odgovor na temu

Radudzoni
Radoslav Jovanovic
Beograd

Član broj: 8384
Poruke: 133
*.fiberop.matgnet.com.



Profil

icon Re: Instanciranje klase preko njenog imena04.09.2006. u 08:22 - pre 213 meseci
Citat:
spartak
Code:

  MojaKlasa mojObjekat = new MojaKlasa();


spartak, batice, nadam se da se salis ;-)

Citat:
DarkMan: Evo ti jedan primer za instanciranje forme:
Code:

                Form form = (Form)Activator.CreateInstance(Type.GetType("FormMain"));


Mislim da je ovo to sto mi treba... Nisam jos probao ali zvuci logicno... Hvala DarkMan
 
Odgovor na temu

Radudzoni
Radoslav Jovanovic
Beograd

Član broj: 8384
Poruke: 133
*.fiberop.matgnet.com.



Profil

icon Re: Instanciranje klase preko njenog imena05.09.2006. u 12:25 - pre 213 meseci
Citat:


Citat:
DarkMan: Evo ti jedan primer za instanciranje forme:

Code:

Form form = (Form)Activator.CreateInstance(Type.GetType("FormMain"));



Mislim da je ovo to sto mi treba... Nisam jos probao ali zvuci logicno... Hvala DarkMan

Malo me kolje sto mi je klasa ciji objekat hocu u drugom dll-u... hm..(?)
Zapravo, evo situacije... Na osnovu domenskog objekta koji prosledim perzistentnom servisu ja znam kog mi je tipa objekat, jer je on spoljni kljuc objekta koji sam prosledio, pa refleksijom dodjem do njegovog tipa... (kazem spoljni kljuc jer mi domenski objekti predstavljaju "sliku" baze)... Ali sex nastaje zato sto u design timeu perzistentni servis zbog late bindinga nema pojma koji ce mu objekat biti prosledjen...
A neki Factory koji ce mi kreirati objekte na osnovu prosledjenog stringa izbegavam jer cu sa pojavom novog domenskog objekta morati da menjam i Factory klasu, sto bih voleo da izbegnem...
Parametar metode CreateInstance(Type type) - Type.GetType("NazivDomenskogObjekta") mi vraca null u run time-u...

Ako neko na osnovu ovih dodatnih informacija ima resenje, voleo bih da ga cujem...

Pozdrav.
 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
*.dynamic.sbb.co.yu.

Jabber: DarkMan


Profil

icon Re: Instanciranje klase preko njenog imena05.09.2006. u 16:50 - pre 213 meseci
Mozda bih mogao pomoci kada bi imao neki mali primer.
Mozda da probas da izvuces type na sledeci nacin (ovo samo nagadjam, nisam nikada radio):
Code:

Assembly a = Assembly.Load("<tvoj dll>");
Type[] types = a.GetTypes(  );
 
Odgovor na temu

Radudzoni
Radoslav Jovanovic
Beograd

Član broj: 8384
Poruke: 133
*.ptt.yu.



Profil

icon Re: Instanciranje klase preko njenog imena05.09.2006. u 19:39 - pre 213 meseci
Code:

public class Mesto
{
    [Kljuc("ID")]
    public int ID
   {
       get i set;
   }
    
   [Polje("Naziv")]
   public string Naziv
   {
       get i set;
   }

    [SpoljniKljuc()]
    public Drzava DrzavaFK
   {
       get i set;
   }
}

public class Drzava
{
    [Kljuc("IDDrzava")]
    public int ID
   {
       get i set;
   }
    
   [Polje("Naziv")]
   public string Naziv
   {
       get i set;
   }
}


class NekaKlasa
{
    public void Daj(object o)
    {
    //Imam napunjen IDataReader reader iz tabele Mesta
   //Prolazim kroz sve propertije i gadjam polja u readeru u glavu preko naziva koje dobijam refleksijom iz propertija
   //Kad dodjem na properti DrzavaFK
    
   object o1 = //sad mi treba instanca Drzava klase
                   //jer mi je u readeru kolona IDDrzava
                   //a koji ce objekat biti prosledjen metodi to se ne zna...
   //ali u vreme izvrsenja ja znam kog mi je tipa properti DrzavaFK (znaci Drzava)
   //i samo treba nekako da ga instanciram... preko tipa ili naziva... kako god...

    //inace NE MOGU da ga instanciram u konstruktoru (jer mi je bitno da to ne readim), tako da ga postavljam na null...!!!
}


Eto to su moji problemi ;-)
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

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



+171 Profil

icon Re: Instanciranje klase preko njenog imena05.09.2006. u 20:57 - pre 213 meseci
Hmm, jesi li ti pogledao sve metode CreateInstance. Imas CreateInstance(string assemblyNam, string typeName) bas za tu namenu da ucitas iz drugog assembly-ja objekat. Probaj pa javi.
 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
*.dynamic.sbb.co.yu.

Jabber: DarkMan


Profil

icon Re: Instanciranje klase preko njenog imena05.09.2006. u 21:01 - pre 213 meseci
Ovde bi bilo bolje da ti pomogne neko ko je vise radio sa strongly typed data sets (nisam nikada radio sa njima a pretpostavljam da je ovde to u pitanju).
Mnogo si sturo dao taj primer. Opis mi je dosta nerazumljiv a nisi napisao nista koda u metodi Daj.
Gde ti je taj IDataReader za Mesta?
Sta je parametar "object o" u metodi Daj? Jel to instanca klase Mesta na osnovu koje hoces da dobije instancu klase Drzava?
Kazes da znas kog je tipa objekat koji trebas da instanciras a ne mozes da ga instanciratis?
Ako si prosledjivao ime klase kao string, jesi li prosledjivao puno ime objekta (ime namespace-a +"." + naziv klase) ?
Zar ti typeof(DrzavaFK) ne vraca klasu Drzava?
Kako bi ga inace normalno instancirao klasu Drzava (bez ovih petljanja sa imenima)?
 
Odgovor na temu

Radudzoni
Radoslav Jovanovic
Beograd

Član broj: 8384
Poruke: 133
*.fiberop.matgnet.com.



Profil

icon Re: Instanciranje klase preko njenog imena06.09.2006. u 10:12 - pre 213 meseci
Citat:
Gde ti je taj IDataReader za Mesta?

On je nebitan... Povukao je tri kolone iz tabele Mesta i to sam proverio u debugeru

Citat:

Sta je parametar "object o" u metodi Daj? Jel to instanca klase Mesta na osnovu koje hoces da dobije instancu klase Drzava?

Da... u ovom slucaju to je objekat klase Mesta... a tokom rada aplikacije moze da bude bilo koji Domenski objekat (Radnik, PoslovniPartner, Roba...)

Citat:
Kazes da znas kog je tipa objekat koji trebas da instanciras a ne mozes da ga instanciratis?

Da... u debageru mi PropertyInfo govori o tome kog je tipa properti DrzavaFK... ali nisam mogao da ga instanciram...

Citat:
Ako si prosledjivao ime klase kao string, jesi li prosledjivao puno ime objekta (ime namespace-a +"." + naziv klase) ?

Jesam... ali...

Citat:
Kako bi ga inace normalno instancirao klasu Drzava (bez ovih petljanja sa imenima)?

Code:
Drzava drzava = new Drzava();

ako sam dobro razumeo pitanje...


Citat:
Hmm, jesi li ti pogledao sve metode CreateInstance. Imas CreateInstance(string assemblyNam, string typeName) bas za tu namenu da ucitas iz drugog assembly-ja objekat. Probaj pa javi.

CreateInstance(string assemblyNam, string typeName) vraca System.Runtime.Remoting.ObjectHandle... pa onda pozovem metodu Unwrap() od ObjectHandle objekta i ona mi vrati objekat koji je Wrap-ovan...
Tako da sam uspeo da dobijem ono sto sam hteo...

Hvala na pomoci, drugari...
 
Odgovor na temu

Prokleta_Nedelja
Beograd

Član broj: 90608
Poruke: 450
*.telrad.net.



+42 Profil

icon Re: Instanciranje klase preko njenog imena06.09.2006. u 14:22 - pre 213 meseci
imam jedno rjesenje ali nisam siguran koliko ce ti odgovarati

dim kolekcija as new collection
dim objekt as mojobjekt


sub praviinstancu
kolekcija.add (new mojobjekt)
objekt= kolekcija.item(kolekcija.count)
controls.add objekt
end sub

svaki objekt mozes pozivati ovako

objekt=kolekcija.item(neki broj)

i onda raditi sa tim objektom

objekt.visible i tome slicno
 
Odgovor na temu

[es] :: .NET :: Instanciranje klase preko njenog imena

[ Pregleda: 4353 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

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