我的嵌套类的范围错误?

时间:2013-09-28 20:24:46

标签: c# asp.net visual-studio-2010

在工作中,我会监控与服务器上运行的应用程序相关联的大量服务器和网站。通常,每个应用程序后面都有一组服务器,大约有6-10个不同的Web页面。所以我做的是创建了一个Servers类,它将接受服务器的名称并控制与之关联的URL。现在这是我正在努力的部分。每个网址都有两个与之关联的值:物理网址和网址状态(在线/离线)。我提出了两种处理方法:要么我创建一个2D数组(或列表),要么创建一个url子类。子类方法似乎会更好,因为我认为访问子类的所有方法都很容易......好吧,现在我不能在Servers类之外调用它们。这让我觉得我的类/方法的范围有问题。这是我的Servers.cs代码......我做错了什么?

public class Server
{
    public List<string> serverNames = new List<string>();
    public List<object> urlList = new List<object>();
    public string[][] urlArr = new string[1][];

    public Server()
    {

    }

    public Server(string nm)
    {
        serverNames.Add(nm);
    }

    public void setName(string newName)
    {
        serverNames.Add(newName);
    }

    public void addUrl(string newUrl)
    {
        Server.Url url = new Server.Url(newUrl);
        urlList.Add(url);
        url.SetStatus(false);
    }

    protected class Url
    {
        public string url;
        public bool status;

        public Url()
        {
        }

        public Url(string URL)
        {
            url = URL;
        }

        public void SetStatus(bool stat)
        {
            status = stat;
        }

        public bool ReturnStatus()
        {
            return status;
        }
    }
}

以下是我尝试调用Url类方法ReturnStatus以查看该url的状态的方法。问题是ReturnStatus方法不可用......

private void button2_Click(object sender, EventArgs e) 
{ 
    int length = serversList[0].urlList.Count;

    for (int i = 0; i <= length - 1; i++)
    {
        listBox1.Items.Add(serversList[0].urlList[i].ToString()+                             serversList[0].urlList[i].ReturnStatus());
    }
}

1 个答案:

答案 0 :(得分:2)

创建Url类绝对是正确的举措。如果您最终需要在其中存储更多信息(可能是LastGoodStatusTime或其他一些报告数据),它可以为您提供灵活性和增长潜力。但是,看起来你可能不希望它成为一个内部类。只要把它变成自己的类,然后每个人都可以访问它。

此外,正如上面提到的评论之一,Status类中的Url最好是作为一个属性。

public class Server
{
    public List<string> serverNames = new List<string>();
    public List<object> urlList = new List<object>();
    public string[][] urlArr = new string[1][];

    public Server()
    {

    }

    public Server(string nm)
    {
        serverNames.Add(nm);
    }

    public void setName(string newName)
    {
        serverNames.Add(newName);
    }

    public void addUrl(string newUrl)
    {
        Server.Url url = new Server.Url(newUrl);
        urlList.Add(url);
        url.SetStatus(false);
    }
}

public class Url
{
    public string url;
    public bool Status { get; set; }

    public Url()
    {
    }

    public Url(string URL)
    {
        url = URL;
    }
}

请注意,如果您强烈希望保持Url内部班级的路线,则需要:

  • 设为public
  • 请将外部课程中的Url称为Server.Url,与var myUrl = new Server.Url("http://stackoverflow.com/");
  • 一样