Avatar billede detfedesvin Nybegynder
14. oktober 2004 - 22:37 Der er 8 kommentarer

Dynamisk oprettelse af objekter

Er det muligt at oprette et objekt, ud fra en steng med som inderholder typen på det objekt man vil oprette?
Eks. objekt der skal opettes Test
string type = "Test"
type nytObjekt = new type

Er der en måde at gøre dette på.

Man kan selvfølgelig lave en switch som undersøger strengen og derudfra vælger det rigtige type objekt, men den er ikke så dynmaisk som man kunne ønske sig.
Avatar billede arne_v Ekspert
14. oktober 2004 - 22:41 #1
Ja !

Assembly.Load(dllname).CreateInstance(classname)

returnerer en instans af den angive klasse fra den angivne DLL.
Avatar billede guidmaster Nybegynder
14. oktober 2004 - 22:42 #2
Med reflection kan du gøre det du her nævner.

Du skal her ind og kigge på CreateInstance metoden.
Avatar billede arne_v Ekspert
14. oktober 2004 - 22:42 #3
Du kan bruge det på 2 måder:

1)

alle de klasser du loader arver fra en klasse/interface så du kan sige:

X x = (X)Assembly.Load(dllname).CreateInstance(classname);

2)

Du bliver nødt til at bruge reflection på objektet til at kalde metoder med.
Avatar billede arne_v Ekspert
14. oktober 2004 - 22:44 #4
Eksempel på #1:

I.cs
----

public interface I
{
    void Doit();
}

A.cs
----

using System;

public class A : I
{
    public void Doit()
    {
        Console.WriteLine("I am A");
    }
}

B.cs
----

using System;

public class B : I
{
    public void Doit()
    {
        Console.WriteLine("I am B");
    }
}

Main.cs
-------

using System;
using System.Reflection;

class MainClass
{
    public static void test(string dllname, string classname, string methodname)
    {
        I o = (I)Assembly.Load(dllname).CreateInstance(classname);
        o.Doit();
    }
    public static void Main(string[] args)
    {
        test("A", "A", "Doit");
        test("B", "B", "Doit");
    }
}
Avatar billede arne_v Ekspert
14. oktober 2004 - 22:44 #5
Command line build med:

csc /t:library /out:I.dll I.cs
csc /t:library /r:I.dll /out:A.dll A.cs
csc /t:library /r:I.dll /out:B.dll B.cs
csc /t:exe /r:I.dll /out:Main.exe Main.cs
Avatar billede arne_v Ekspert
17. oktober 2004 - 17:18 #6
Jeg har også et eksempel på #2 liggende.
Avatar billede arne_v Ekspert
17. oktober 2004 - 17:18 #7
og et svar
Avatar billede arne_v Ekspert
06. november 2004 - 18:34 #8
Tid at få lukket spørgsmålet ?
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