我的嵌套类的范围错误

本文关键字:范围 错误 嵌套 我的 | 更新日期: 2023-09-27 18:33:06

在工作中,我监视与服务器上运行的应用程序关联的服务器和网站的大量列表。通常,每个应用程序后面都有一个服务器集群和大约 6-10 个不同的网页。所以我所做的是我创建了一个 Servers 类,该类将接受服务器的名称并控制与之关联的 URL。现在这是我正在努力解决的部分。每个 url 将有两个与之关联的值:物理 url 和 url 的状态(联机/脱机(。我想出了两种处理这个问题的方法:要么创建一个 2D 数组(或列表(,要么创建一个 url 子类。子类方法似乎会更好,因为我认为访问子类的所有方法会很容易......好吧,现在我根本无法在服务器类之外调用它们。这让我觉得我对类/方法的范围有问题。这是我的服务器.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 的状态的方式。问题是返回状态方法不可用...

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

我的嵌套类的范围错误

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

此外,正如其中一条评论所提到的,Url类中的Status最好作为属性。

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/");