2009-07-31 9 views
0

Je n'ai pas travaillé avec Reflection depuis la dernière fois que j'ai touché Java et que je suis un peu rouillé. J'ai créé un service Windows qui utilise des minuteurs et pour certaines classes, j'ai besoin que le nom de l'objet soit dynamique (tiré d'une table SQL). La portée de la création des objets est dans une boucle while et je dois pouvoir enregistrer les propriétés de chaque objet.C# Nom d'objet dynamique .NET

EDIT:

terminé à l'aide d'un dictionnaire pour que je puisse récupérer les propriétés de chaque objet plus tard.

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 c'est la question la plus folle que j'ai vu jusqu'ici! – zvolkov

Répondre

6

Il n'existe pas de "nom d'instance de classe". Un objet n'a pas de nom - une variable le fait.

Maintenant, peut-être que vous voulez créer un Dictionary<string, TestA> pour créer une carte d'un "nom" à un objet ... Je ne suis pas sûr. Comment voulez-vous utiliser ces noms plus tard?

Activator.CreateInstance est généralement approprié si vous ne connaissez pas le tapez jusqu'à l'exécution. Est-ce vraiment le cas, ou pas? Quelles informations avez-vous au moment de la compilation, et qu'avez-vous seulement au moment de l'exécution?

Lorsque vous dites que vous voulez "passer un certain nombre de paramètres à un constructeur par défaut" - que voulez-vous dire exactement? Habituellement, le terme "constructeur par défaut" est utilisé pour désigner un constructeur sans paramètre . Comment comptez-vous transmettre des paramètres à un constructeur sans paramètre?


Je préfère réserver pour un constructeur créé par le parameterless compilateur lorsque vous ne l'avez pas spécifié de constructeurs du tout, mais nous allons.

+0

Oui! Utilise un dictionnaire. Pas de réflexion. +1 –

+0

Oui, je pense qu'un dictionnaire est la seule façon dont il pourra utiliser les noms de chaînes. Je soupçonne qu'il demande comment mettre en œuvre la solution sur laquelle il a déjà décidé. –

+0

1) Désolé, pas le constructeur par défaut, juste un constructeur. 2) Oui, ça sonne comme si un dictionnaire fonctionnait. – jw0rd