2009-07-31 16 views
0

Ich habe nicht mit Reflection gearbeitet, seit ich das letzte Mal Java berührt habe und ich etwas eingerostet bin. Ich habe einen Windows-Dienst erstellt, der Timer verwendet, und für einige der Klassen muss der Objektname dynamisch sein (aus einer SQL-Tabelle). Der Umfang der Erstellung der Objekte liegt in einer while-Schleife und ich muss in der Lage sein, die Eigenschaften jedes Objekts zu speichern.C# .net dynamischer Objektname

EDIT: später

mit einem Wörterbuch Ended, so dass ich jedes Eigenschaften des Objekts abrufen können.

private void GetActiveScans() 
    { 
     string sql = "SELECT * FROM scans WHERE enabled = 1"; 
     SqlConnection sqlconn = new SqlConnection(connectionString); 
     sqlconn.Open(); 
     SqlCommand cmd = new SqlCommand(sql, sqlconn); 
     SqlDataReader drActiveScans = cmd.ExecuteReader(CommandBehavior.CloseConnection); 

     Dictionary<int, WindowsServiceAudit> WSA = new Dictionary<int, WindowsServiceAudit>(); 

     while (drActiveScans.Read()) 
     { 
      string tmpscantype = drActiveScans["scantype"].ToString(); 

      switch (tmpscantype) 
      { 
       case "services": 
        int scanid = Convert.ToInt32(drActiveScans["scanid"]); 
        string scanname = drActiveScans["scanname"].ToString(); 
        int serverclass = Convert.ToInt32(drActiveScans["serverclass"]); 
        int interval = Convert.ToInt32(drActiveScans["interval"]); 

        WindowsServiceAudit x = new WindowsServiceAudit(scanid, scanname, serverclass, interval); 
        WSA.Add(scanid, x);     
        break; 
      } 
     } 
    } 
+0

wow das ist die verrückteste Frage, die ich bisher gesehen habe! – zvolkov

Antwort

6

Es gibt keinen Klasseninstanznamen. Ein Objekt hat keinen Namen - eine Variable tut es.

Jetzt möchten Sie vielleicht eine Dictionary<string, TestA> erstellen, um eine Karte von einem "Namen" zu einem Objekt zu erstellen ... Ich bin mir nicht sicher. Wie möchten Sie diese Namen später verwenden?

Activator.CreateInstance wäre in der Regel geeignet, wenn Sie die Typ bis zur Ausführungszeit nicht kennen. Ist das tatsächlich der Fall oder nicht? Welche Informationen haben Sie zur Kompilierzeit und was haben Sie nur zur Ausführungszeit?

Wenn Sie sagen, dass Sie eine Reihe von Parametern an einen Standardkonstruktor übergeben wollen - was genau meinen Sie? Normalerweise wird der Begriff "Standardkonstruktor" verwendet, um auf einen parameterlosen Konstruktor zu verweisen. Wie wollen Sie Parameter an einen parameterlosen Konstruktor übergeben?


ziehe ich es für einen parameterlosen Konstruktor vom Compiler erstellt zu reservieren, wenn Sie irgendwelche Konstrukteurs überhaupt nicht festgelegt haben, aber es gehen wir.

+0

Ja! Benutze ein Wörterbuch. Keine Reflexion. +1 –

+0

Ja, ich denke, ein Wörterbuch ist die einzige Möglichkeit, String-Namen verwenden zu können. Ich vermute, dass er fragt, wie er die Lösung, die er bereits beschlossen hat, umsetzen will. –

+0

1) Entschuldigung, kein Standardkonstruktor, nur ein Konstruktor. 2) Ja, klingt wie ein Wörterbuch funktioniert. – jw0rd

Verwandte Themen