c#.NET动态对象名称

时间:2009-07-31 19:15:40

标签: c# .net class dynamic

自上次触摸Java以来​​,我没有使用过Reflection,而且我有点生疏了。我创建了一个使用计时器的Windows服务,对于某些类,我需要将对象名称设置为动态(从sql表中提取)。对象创建的范围在while循环中,我需要能够保存每个对象的属性。

编辑:

使用字典结束,以便稍后可以检索每个对象的属性。

    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 个答案:

答案 0 :(得分:6)

没有“类实例名称”这样的东西。对象没有名称 - 变量可以。

现在也许你想创建一个Dictionary<string, TestA>来创建一个从“名称”到对象的地图......我不确定。您希望以后如何使用这些名称?

如果您在执行时间之前不知道类型,那么

Activator.CreateInstance通常是合适的。那是不是真的如此?你在编译时有什么信息,你只在执行时有什么信息?

当你说你想“将一些参数传递给默认构造函数”时 - 你究竟是什么意思?通常,术语“默认构造函数”用于表示无参数构造函数 1 。您打算如何将参数传递给无参数构造函数?


1 我更喜欢为你没有指定任何构造函数的编译器创建的无参数构造函数保留它,但是我们去了。