1

職場では、サーバー上で実行されているアプリケーションに関連付けられたサーバーと Web サイトの非常に大きなリストを監視しています。通常、各アプリケーションの背後にはサーバーのクラスターがあり、およそ 6 ~​​ 10 の異なる Web ページがあります。そこで、サーバーの名前を受け取り、それに関連付けられている URL を制御する Servers クラスを作成しました。今、ここが私が苦労している部分です。各 URL には、物理​​ URL と URL のステータス (オンライン/オフライン) という 2 つの値が関連付けられます。これを処理する 2 つの方法を思いつきました: 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());
    }
}
4

1 に答える 1

2

クラスを作成することUrlは、ここで間違いなく正しい動きです。LastGoodStatusTimeより多くの情報 (おそらくまたはその他のレポート データ)を格納する必要が生じた場合に備えて、柔軟性と成長の可能性を提供します。ただし、おそらくそれを内部クラスにしたくないようです。独自のクラスにするだけで、誰もがアクセスできるようになります。

さらに、言及されたコメントの1つとしてStatusUrlクラス内の はプロパティとして作成する方がよいでしょう。

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/");
于 2013-09-28T21:05:39.453 に答える