Avatar billede Slettet bruger
13. september 2007 - 09:36 Der er 19 kommentarer og
1 løsning

Oprette klasseinstans ud fra string?

Hej eksperter!

Hvordan kan jeg oprette en klasseinstans med navn som en kendt string?
Jeg skal bruge det til dynamisk at oprette instanser ud fra en string, således at klassens name-egenskab får værdien af strengen.
Avatar billede nielle Nybegynder
13. september 2007 - 12:45 #1
Er det sådan her du mener?

class DinKlasse
{
    public string name = "";

    public DinKlasse(string name)
    {
        this_name = name;
    }
}


DinKlasse minKlasse = new DinKlasse("eksperten");
Avatar billede nielle Nybegynder
13. september 2007 - 19:19 #2
Ups:

this.name = name;
Avatar billede driis Nybegynder
13. september 2007 - 19:39 #3
Du vil dynamisk oprette en instans af en klasse ud fra dens navn ? Er det dét, der er spørgsmålet ?

I så fald, kan du få fat i typen vha. Type.GetType og så bruge Activator klassen til at lave en instans af samme:

using System;

namespace TestStuff
{
    public class TestClass {}

    public class Program
    {
        static void Main(string[] args)
        {
            string className = "TestStuff.TestClass, TestStuff";
            Type type = Type.GetType(className);
            object instance = Activator.CreateInstance(type);
            Console.WriteLine("Instance is of type: {0}", instance.GetType());
        }
    }
}
Avatar billede Slettet bruger
14. september 2007 - 20:32 #4
Nej, driis, som jeg skrev: Ud fra en string. Faktisk noget i stil med hvad nielle skrev.
Dog havde jeg håbet, at der var en lettere metode end først at oprette instansen med et tilfældigt navn og derefter ændre det, men hvad... Bare smid et svar, nielle.
Avatar billede nielle Nybegynder
14. september 2007 - 20:34 #5
Den bliver da ikke oprettet med et tilfældigt navn? Den bliver oprettet med navnet som et argument i constructoren:

DinKlasse minKlasse = new DinKlasse("eksperten");
Avatar billede arne_v Ekspert
14. september 2007 - 20:43 #6
Jeg foretraekker normalt:

public class DinKlasse
{
    private string name;
    public DinKlasse() : this("")
    {
    }
    public DinKlasse(string name)
    {
        this.name = name;
    }
    ...
}
Avatar billede driis Nybegynder
14. september 2007 - 22:00 #7
Jeg er stadig ikke 100% sikker på at jeg har forstået spørgsmålet rigtigt.

Hvis mit svar er forkert, så afvis det endelig. Hvis du vil oprette en instans og instansiere den med "name" field eller property til det du giver med, så er nielle's og arne's svar helt korrekt.
Avatar billede Slettet bruger
15. september 2007 - 10:02 #8
Øh... ingen af jer har vist forstået det rigtigt ^^
Jeg vil eksempelvis kunne oprette instansen EnInstans hvor navnet (EnInstans) er defineret ved en string...
Altså eksempelvis ud fra en eller anden string kaldet EnString således at hvis EnString er sat til "EtEllerAndet" bliver instansens navn når den oprettes EtEllerAndet.
Avatar billede nielle Nybegynder
15. september 2007 - 10:21 #9
Hmmm, det kan du vist ikke.

Må man spørge hvad du ønsker at bruge det til?
Avatar billede nielle Nybegynder
15. september 2007 - 10:42 #10
Måske kan du alternativt bruge Dictionary til dit problem. På den måde kan du associere et navn (en tekst) med en bestemt klasse:

using System;
using System.Collections.Generic;

namespace e796163
{
    class Program
    {
        class MyClass
        {
            public int alder;

            public MyClass(int alder)
            {
                this.alder = alder;
            }
        }

        static void Main(string[] args)
        {
            Dictionary<string, MyClass> myClassDict = new Dictionary<string, MyClass>();

            myClassDict.Add("jensen", new MyClass(15));
            myClassDict.Add("pedersen", new MyClass(52));

            Console.WriteLine(myClassDict["pedersen"].alder);

            myClassDict["jensen"].alder = 42;

            Console.WriteLine(myClassDict["jensen"].alder);
        }
    }
}
Avatar billede Slettet bruger
15. september 2007 - 17:33 #11
Hm. Jeg havde på fornemmelsen, at det ikke kunne lade sig gøre...
Jeg skal bruge det til en funktion, der skal oprette instanser ud fra argumenterne. Men ja, der er andre måder at gøre det på...
Én af dem er i mit tilfælde at droppe funktionen og selv skrive den nødvendige kode hver gang. Det behøves heller ikke være så besværligt, men det kræver at jeg finder ud af, hvordan jeg opretter navngivne instanser i en List<>. Hvordan gør jeg så det?
Altså i stedet for MinList.Add(new MinKlasse("argument"))...
Måske MinList.Add(MinKlasse Noget = new MinKlasse("argument"))?
Avatar billede Slettet bruger
15. september 2007 - 17:33 #12
(Bare smid nogle svar, folkens...)
Avatar billede nielle Nybegynder
15. september 2007 - 17:37 #13
Eller med Dictionary:

MinList.Add("Noget", new MinKlasse("argument"));

?
Avatar billede Slettet bruger
15. september 2007 - 20:27 #14
Huh? Laver dit eksempel en instans af MinKlasse med navnet Noget og argumentet "argument"? Det gør præcis det, jeg skal bruge koden til :)
Jeg læser lige lidt om Dictionory-klassen, bare smid et svar.
Avatar billede Slettet bruger
15. september 2007 - 22:24 #15
*Dictionary... Men det lyder yderst anvendeligt :)
Avatar billede nielle Nybegynder
16. september 2007 - 09:16 #16
Svar :^)
Avatar billede Slettet bruger
16. september 2007 - 17:00 #17
ARGH smerte
Avatar billede Slettet bruger
16. september 2007 - 17:01 #18
Fik ikke markeret begge navne :/ Jeg opretter et spørgsmål mere til nielle.
Avatar billede nielle Nybegynder
16. september 2007 - 17:15 #19
Husk at referere mellem de to spørgsmpl:

http://www.eksperten.dk/spm/796673
Avatar billede Slettet bruger
16. september 2007 - 18:24 #20
Okay... gør jeg en anden gang, så :)
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