2009-07-31 2 views
0

마지막으로 자바를 만져서 조금 녹슬었기 때문에 리플렉션에서 작업하지 않았습니다. 타이머를 사용하는 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은 실행 시간까지 유형을 모르는 경우에 적합합니다. 그게 사실인가, 그렇지 않은가? 컴파일 시간에는 어떤 정보가 있습니까? 실행 시간에만 무엇이 있습니까?

"기본 생성자에 여러 매개 변수 전달"- 정확히 무엇을 의미합니까? 일반적으로 "기본 생성자"라는 용어는 매개 변수없는 생성자 을 나타내는 데 사용됩니다. 매개 변수없는 생성자에 매개 변수를 전달하려는 방법은 무엇입니까?


1 나는 당신이 전혀 생성자를 지정하지 않은 경우 컴파일러에 의해 생성 된 매개 변수가없는 생성자를 위해 예약하는 것을 선호하지만, 거기 우리는 간다.

+0

예! 사전을 사용하십시오. 반영이 아닙니다. +1 –

+0

그래, 나는 사전이 그가 문자열 이름을 사용할 수있는 유일한 방법이라고 생각한다. 그가 이미 결정한 해결책을 구현하는 방법을 묻고있는 것 같습니다. –

+0

1) 죄송 합니다만, 기본 생성자가 아니라 단지 생성자입니다. 2) 예, 사전과 같은 소리가 나옵니다. – jw0rd