banjalukaforum.com https://banjalukaforum.com/ |
|
Refleksija https://banjalukaforum.com/viewtopic.php?f=18&t=32506 |
Stranica 1 od 1 |
Autoru: | RAbbit [ 04 Sep 2007, 07:13 ] |
Tema posta: | |
Na konkursu lijepo pise mogucnost zaposlenja.Slucajno znam i ko je pobedio na konkursu i zaposlen je u berzi. Izrada takve komponente definitivno zahteva minimum 15 sati rada da sve bude perfektno i detaljno iskomentarisano,iztestirano u bilo kom programskom jeziku ukljucujuci i Javu. PS.Da li Java ima reflection? |
Autoru: | Vertygo [ 04 Sep 2007, 08:34 ] |
Tema posta: | |
"Slucajno znam i ko je pobedio na konkursu i zaposlen je u berzi. " Kako to mislis ... pa konkurs jos traje ... pise do 30 septembra ![]() Java ima "reflection" ali se ne moze kao u .NET-u ucitati assembly i izvrsiti metod iz neke klase. |
Autoru: | RAbbit [ 04 Sep 2007, 09:29 ] |
Tema posta: | |
Reflection u Javi je losiji tako mi neko rece,ako uopste i postoji. Pa nemam pojma da li je zavrsen ili ne,cuo sam da su nekoga primili,to neznaci da nece primiti jos nekoga... |
Autoru: | che.guevara [ 13 Sep 2007, 12:03 ] |
Tema posta: | |
Joj pitanja pa naravno da ima refleksiju, samo njena upotreba se ne preporucuje (tj. osim ako mora). Vertygo, mislim da je moguce ucitati .class fajl naknadno pomocu ClassLoadera - ako si na to mislio. Refleksija je u fazonu: nesto.getClass().getMethod("ime", ...(tipovi argumenata)).invoke(argumenti) Tako nesto ![]() |
Autoru: | RAbbit [ 13 Sep 2007, 14:56 ] |
Tema posta: | |
Ucitati class file naknadno je u c# puno teze ali ne i nemoguce. |
Autoru: | Vertygo [ 13 Sep 2007, 23:40 ] |
Tema posta: | |
Malkice OT ali dobro ... che.guevara zar ClassLoader ne ucitava metadata podatke assemblya ( klase/metode/attribute-propertye, barem ClassLoader to radi u .netu) ? Ugl u .NET-u CLR Loader ucitava assembly (dll, exe ...) u Application Domain (prostor u kome se izvrsava nasa aplikacija), a ClassLoader ocitava meta podatke assembly-a (klase, metode, property-e). Rabbit po cemu je tesko ![]() dve linije koda i ... Kod: Assembly asm = Assembly.LoadFile("C:\\fajl.dll");
asm.GetType("klasa").GetMethod("metoda").Invoke(new object(), null); |
Autoru: | Digresija [ 13 Sep 2007, 23:55 ] |
Tema posta: | |
@che: Mogao bi splitovati temu na temu o konkursu i temu o tim klasama. |
Autoru: | Vertygo [ 13 Sep 2007, 23:59 ] |
Tema posta: | |
Hvala Digresija na ideji ... pospan sam vidis nisam se ni setio toga ... tema splitovana ![]() |
Autoru: | che.guevara [ 14 Sep 2007, 23:24 ] |
Tema posta: | |
Hvala kolezi Vertigu ![]() Naravno da Java sve to moze i da moze i C#, inace bi C# bio "sa konja na magarca". Koga interesuje Java, izguglao sam ovaj pdf: http://www.panix.com/~mito/articles/art ... er-ltr.pdf Zanimljiva skripta o ClassLoaderima (kako se prave). |
Autoru: | RAbbit [ 15 Sep 2007, 08:32 ] |
Tema posta: | |
Nismo se razumeli.Ja sam mislio na nesto ovako. Metod pozvati nije problem. Assembly asm = Assembly.LoadFile(@"C:\REGIJE.dll"); Type r = asm.GetType("REGIJE"); List<r> lista = new List<r>(); ovde se dobija greska.... Mozda ti Vertigo znas neki nacin da se ovo izvede? Ja znam jedan... |
Autoru: | Vertygo [ 15 Sep 2007, 16:23 ] |
Tema posta: | |
Evo kako mozes dodati vrednosti generickoj listi preko Reflectiona a da ne koristis MSIL ... Kod: private void button1_Click(object sender, EventArgs e) { //Ucitavanje DLL-a sa diska u AppDomain Assembly asm = Assembly.LoadFile(@"C:\MojDll.dll"); //Ucitavanje klase Type myType = asm.GetType(Path.GetFileNameWithoutExtension(asm.ManifestModule.ScopeName) +".Class1"); //Instanciranje klase preko staticke metode CreateInstance object vrednost1 = Activator.CreateInstance(myType); object vrednost2 = Activator.CreateInstance(myType); object vrednost3 = Activator.CreateInstance(myType); //Dodavanje vrednosti polja vrednost1.GetType().GetProperty("Polje").SetValue(vrednost1, 1, null); vrednost2.GetType().GetProperty("Polje").SetValue(vrednost2, 2, null); vrednost3.GetType().GetProperty("Polje").SetValue(vrednost3, 3, null); //Kreiranje Liste za nasu klasu Type listType = typeof(List<>); Type listClass = listType.MakeGenericType(myType); object obj = Activator.CreateInstance(listClass); //MethodInfo[] methods = myObject.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public); //Dodavanje vrednosti generickoj listi DodajVrednosti(ref obj, vrednost1, vrednost2, vrednost3); } /// <summary> /// Dodavanje vrednosti generickoj listi /// </summary> /// <param name="obj">List<T> objekat</param> /// <param name="vrednosti">Instance klase</param> private void DodajVrednosti(ref object obj, params object[] vrednosti) { for(int i=0;i<vrednosti.Length;i++) { obj.GetType().InvokeMember("Add", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, obj, new object[] { vrednosti[i] } ); } } Kod: public class Class1
{ private int polje; public int Polje { get{return this.polje;} set {this.polje = value;} } } |
Autoru: | che.guevara [ 15 Sep 2007, 20:32 ] |
Tema posta: | |
Refleksija sluzi za to "pozivanje metoda" a ucitavanje iz ".dll" odnosno iz ".class" ili ".jar" je nesto drugo. ClassLoader obavlja tu funkciju u Javi. Mozda ovaj pdf sto sam ga prilozio nije dovoljno jasan? |
Autoru: | Vertygo [ 15 Sep 2007, 22:53 ] |
Tema posta: | |
Ja sam vec rekao da CLR Loader ucitava DLL u Application Domain ... to je sto se tice .NET-a ![]() ![]() Sto se tice refleksije ona sluzi znaci za otkrivanje informacija (metadata) klase, propertya, metoda, za njihovo izvrsavanje itd itd ... I to za vreme izvrsavanja programa (runtime) Gore je samo primer kako da se kroz refleksiju kreira i popuni genericka lista. PS po 100 puta editujem post ![]() |
Autoru: | che.guevara [ 16 Sep 2007, 14:38 ] |
Tema posta: | |
Dakle, Rabbit, Reflection i Class Loading nisu komplikovani ni u Javi ni u .NET-u ![]() Vertygo, jebiga, nikako objasniti covjeku ![]() Java rulz NET sux die bitchiezz:) |
Autoru: | RAbbit [ 17 Sep 2007, 07:25 ] |
Tema posta: | |
Bravo Vertigo. Mi nesto pokusavamo sa reflection.emit. Ovoliko refleksije u kodu bi bio udar na preformanse mozda? ![]() |
Autoru: | Vertygo [ 21 Sep 2007, 15:52 ] |
Tema posta: | |
Rabbit: pa ne znam tacno koliko bi uticalo na performanse ... sve zavisi sta se tacno radi ... trebalo bi napraviti benchmark ... ali to je na tebi/vama da uradite ![]() |
Stranica 1 od 1 | Sva vremena su u UTC [ DST ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |