Novo

Forum kao aplikacija na telefonu

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

  • 4 odgovora
  • 2.991 pregleda

Najnovija ↓

Generics,refleksija i sl. 05.05.2008. u 00:16 · pre 225 meseci #1
Imam metodu public T GetInstance<T>().Preko refleksije za vreme izvodjenja pokupim Type (instanceType) koji trebam instancirati i pozovem metodu ovako:

Code:

getInstance<instanceType>();


i naravno javlja gresku kako nema tog namespace-a.

Gdje gresim?


Potpis
Free advice is seldom cheap.
Re: Generics,refleksija i sl. 05.05.2008. u 09:58 · pre 225 meseci #2
Generics radi nad tipovima, ne nad instancama. AKo dobro pretpostavljam ti si radio nesto ovako:

Code:

Type instanceType;
isntanceType = reflectionUzmiType(nesto, nesto, ..);
getInstance<instanceType>();

A to ne moze, instanca tipa Type nije tip, ona je deskriptivni objekat koji opisuje tip i sam po sebi je najobicniji objekat i ne moze da se iskoristi kao Generics parametar. Malo deluje zbunjujuce ali iz istog razloga ne mozes da napravis sledeci code

Dictionary<"pera", 123>

vec moras

Dictionary<string, int>

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: Generics,refleksija i sl. 05.05.2008. u 10:32 · pre 225 meseci #3
"Osjetio" sam da je to u pitanju.

Ima li mozda neko zaobilazno resenje osim Refelction.Emit-a ?
Potpis
Free advice is seldom cheap.
Re: Generics,refleksija i sl. 05.05.2008. u 10:56 · pre 225 meseci #4
Pogledaj Activator.CreateInstance metod ili kreiraj Assembly objekat
pa iz njega pozovi CreateInstance.
Re: Generics,refleksija i sl. 05.05.2008. u 11:04 · pre 225 meseci #5
Ne treba ti aktivator u ovoj situaciji, sve sto ti treba vec imas.

Emit se koristi za generisanje novih tipova, ne za instanciranje postojecih. Ako hoces da napravis instancu tipa koji je opisan sa instanceType koristis sledeci kod:

Code:

ConstructorInfo constr = instanceType.GetConstructor(Type.EmptyTypes);
object instance = constr.Invoke(null);


ovaj kod instancira objekat koristeci default konstruktor (onaj bez parametara), ako hoces da pozoves konstruktor sa odredjenim potpisom, pogledaj help za GetConstructor() i Invoke() metode.

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