Avatar billede dj_uncas Nybegynder
06. april 2006 - 20:36 Der er 12 kommentarer og
1 løsning

Skabe instans fra string

Hejsa

Jeg sidder og stener over noget reflection, og undrer mig nu over hvordan jeg kan skabe en instans af en klasse ud fra en string, eks:
"MinAssembly.MitNamespace.MinKlasse, MinAssembly"

Derudover vil jeg gerne spørge på om den skabte klasse implementerer et vist interface.

Hvordan gør jeg disse ting?

Jeg har søgt igennem MSDN, og har fundet System.Activator klassen, men det kan kun lave et ObjectHandle udfra en string, og det kan jeg ikke bruge...
Avatar billede arne_v Ekspert
06. april 2006 - 21:06 #1
du bliver nok noedt til at splitte din String i 2:

Assembly.Load("MinAssembly").CreateInstance("MitNamespace.MinKlasse")
Avatar billede dj_uncas Nybegynder
06. april 2006 - 21:51 #2
Det var også min intention at splitte strengen - den eneste grund til at udgangspunktet er som i spørgsmålet er at jeg gerne vil have den fra en config-fil.

Har du også et bud på hvordan jeg kan se om objektet implementerer et bestem interface?
Avatar billede arne_v Ekspert
06. april 2006 - 21:55 #3
jeg har ikke proevet men jeg ville forsoege med is operatoren
Avatar billede arne_v Ekspert
06. april 2006 - 21:56 #4
if(o is Isomething)
Avatar billede dj_uncas Nybegynder
06. april 2006 - 22:00 #5
Ja, det virker fint! Tak for det - smid et svar
Avatar billede arne_v Ekspert
06. april 2006 - 22:40 #6
svar
Avatar billede dj_uncas Nybegynder
06. april 2006 - 22:44 #7
Du har ikke hørt om en metoder der direkte tjekker på implementeringer af interfaces vel? Jeg synes bare jeg har hørt en snakke om det... Nå, det kan være han har ment "o is Isomething"
Avatar billede arne_v Ekspert
06. april 2006 - 22:46 #8
jeg kender ikke lige en metode, men der kan sagtens vaere en - jeg kan da lige
studere docs
Avatar billede hmortensen Nybegynder
06. april 2006 - 23:16 #9
Du kan få interfaces sådan her:
Type t = DitObject.GetType();
MemberInfo[] mic = t.GetInterfaces();
foreach (MemberInfo mi in mic)
{
  //mi.Name
}
Avatar billede arne_v Ekspert
06. april 2006 - 23:25 #10
if(o.GetType().GetInterface("ISomething") != null)
Avatar billede dj_uncas Nybegynder
07. april 2006 - 09:19 #11
hmm.. Så vidt jeg fangede dokumentationen, så kastes der en Exception hvis GetInterfaces("lala") ikke finder noget?! Måske mig der har stenet?
Avatar billede hmortensen Nybegynder
07. april 2006 - 12:01 #12
Doc siger:
Return Value
A Type object representing the interface with the specified name, implemented or inherited by the current Type, if found; otherwise, a null reference (Nothing in Visual Basic).

Der returneres null, hvis intet findes, så du kan sagtens bruge den metode arne har skrevet.
Avatar billede dj_uncas Nybegynder
07. april 2006 - 13:23 #13
lækkert :-)

Mange tak begge to..!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester