2009-07-31 16 views
0

最後にJavaに触れてから少し錆びているので、私はReflectionで作業していません。タイマーを使用するWindowsサービスを作成しました。一部のクラスでは、オブジェクト名を動的(SQLテーブルから取得)にする必要があります。オブジェクトの作成範囲はwhileループ内にあり、各オブジェクトのプロパティを保存する必要があります。c#.NETの動的オブジェクト名

編集:私は、後に、各オブジェクトのプロパティを取得できるように辞書を使用して終了

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

これは私がこれまで見てきた最もクレイジーな質問です! – zvolkov

答えて

6

「クラスインスタンス名」はありません。オブジェクトには名前がありません。変数には名前があります。

「名前」からオブジェクトへのマップを作成するのに、Dictionary<string, TestA>を作成したいと思うかもしれません...わかりません。どのようにこれらの名前を後で使用したいですか?

Activator.CreateInstance実行時間までタイプがわからない場合は、通常は適切です。それは事実ですか、そうではありませんか?コンパイル時にはどのような情報がありますか?実行時には何がありますか?

「デフォルトコンストラクタにいくつかのパラメータを渡したい」と言ったとき - 正確にはどういう意味ですか?通常、「デフォルトのコンストラクタ」という用語は、パラメータを持たないコンストラクタを参照するために使用されます。パラメータを持たないコンストラクタにパラメータを渡すつもりはありますか?


私はあなたがすべてで任意のコンストラクタを指定していないが、そこに私たちが行くとき、コンパイラによって作成されたパラメータなしのコンストラクタのためにそれを予約することを好みます。

+0

はい!辞書を使う。反射ではない。 +1 –

+0

ええ、私は辞書が文字列名を使用できる唯一の方法だと思います。私は彼がすでに決定した解決策をどのように実装するかを尋ねていると思う。 –

+0

1)申し訳ありませんが、デフォルトコンストラクタではなく、ただコンストラクタです。 2)はい、辞書のように聞こえます。 – jw0rd

関連する問題