c # .NET динамическое имя объекта - PullRequest
0 голосов
/ 31 июля 2009

Я не работал с Reflection с тех пор, как в последний раз прикасался к Java, и я немного ржавый. Я создал службу Windows, которая использует таймеры, и для некоторых классов мне нужно, чтобы имя объекта было динамическим (извлекается из таблицы sql). Сфера создания объектов находится в цикле while, и мне нужно иметь возможность сохранять свойства каждого объекта.

EDIT:

Завершено использованием словаря, так что я могу получить свойства каждого объекта позже.

    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;
            }
        }
    }

1 Ответ

6 голосов
/ 31 июля 2009

Нет такого понятия, как «имя экземпляра класса». У объекта нет имени - у переменной есть.

Теперь, может быть, вы захотите создать Dictionary<string, TestA>, чтобы создать карту от "имени" до объекта ... Я не уверен. Как вы хотите использовать эти имена позже?

Activator.CreateInstance обычно подходит, если вы не знаете тип до времени выполнения. Это на самом деле так или нет? Какая информация у вас есть во время компиляции, и что у вас есть только во время выполнения?

Когда вы говорите, что хотите «передать несколько параметров конструктору по умолчанию» - что именно вы имеете в виду? Обычно термин «конструктор по умолчанию» используется для ссылки на конструктор без параметров 1 . Как вы собираетесь передавать параметры в конструктор без параметров?


1 Я предпочитаю зарезервировать его для конструктора без параметров, созданного компилятором, когда вы вообще не указали конструкторы, но мы идем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...