0

具体的には、Customer クラスの Arrival メソッドを見てください。for ループを使用して顧客クラスのインスタンスを作成しています。到着時間をテキスト ボックスに書き出そうとすると (テスト目的で)、テキスト ボックスが更新されません。どうしてこれなの?

これは、コンピューティング クラスの小さなシミュレーション プロジェクトです。これは初期段階にあり、おそらく多くの場所で間違っています。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace QueueSimulation
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public void Form1_Load(object sender, EventArgs e)
        {
            MessageBox.Show("The form has loaded");
        }

        public void goButton_Click(object sender, EventArgs e)
        {
            Initialisers init = new Initialisers();

            Customer customer = new Customer();

            customer.Arrive();
        }

        private void stopButton_Click(object sender, EventArgs e)
        {
            // put code here to break out of the program
        }
    }

    public class Customer : Initialisers
    {
        int waitingTime;
        int arrivalTime;
        int arrivalInterval;

        Initialisers init = new Initialisers();


        public void Arrive()
        {
            Customer[] customer = new Customer[1000];
            int counter = 0;
            for (int i = 1; i <= 10; i++)
            {
                customer[i] = new Customer();
                customer[i].TimeArrived();
                displayArrival.Text = displayArrival.Text + customer[i].TimeArrived().ToString();
                // Implement something to either show the time in the queue if needed
                Thread.Sleep(init.CustomerArriveTime*100);
            }
            MessageBox.Show("All of the customers have arrived");
        }

        public string TimeArrived()
        {
            return Convert.ToString(DateTime.Now);
        }

        public void Leave()
        {

        }

        public void GetServed()
        {

        }
    }

    public class Server
    {
        bool servingStatus;
        int servingTime;

        public void Serve()
        {

        }
    }

    public class Initialisers : Form1
    {
        private int cust_no = 3;

        public int CustomerArriveTime
        {
            get
            {
                return cust_no;
            }
            set
            {
                cust_no = value;
            }
        }

        private int s_time = 4;

        public int serveTime
        {
            get
            {
                return s_time;
            }
            set
            {
                s_time = value;
            }
        }
    }
}
4

3 に答える 3

0

これは非常に複雑に思えます。現実世界をモデル化してみてください。Initialisers とは何ですか? なぜ継承ツリーがあるのですか? Customer > Initialisers > Form1?

顧客は、見ている TextBox (表示されているフォームからのもの) ではなく、独自の TextBox に書き込んでいます。

プライベート フィールドを DateTime.Now に設定するメソッド Arrive を用意してみませんか。次に、顧客に TimeArrived を尋ねると、このフィールドが返されます。フォームで、ループ内で必要なだけこれらのメソッドを呼び出します。

これにより、コマンド (到着) がクエリ (TimeArrived) から分離され、継承がより論理的に保たれます。

イニシャライザはもう必要ないかもしれません。また、Customer は Form ではないため、Customer に Form を継承させないでください。

于 2010-12-07T10:39:52.147 に答える
0

Form1 で作成されたテキスト ボックス オブジェクトのインスタンスを Arrive に渡します。

public void Arrive(TextBox displayArrival)

Initialiserz で Form1 を継承しているのはなぜですか? この場合、継承ではなく Form1 への参照を渡す方が適切です。

于 2010-12-07T10:36:56.883 に答える
0

ここには設計上の問題がもっとあると思います。顧客内に顧客のインスタンスを作成しています。

顧客の Arrive メソッドは、おそらく次のように別のクラス内の関数である必要があります。顧客は、顧客が何であるかを定義するだけです。それらの処理は、別のクラスで処理する必要があります。

class Customer
{
    int waitingTime;         
    int arrivalTime;         
    int arrivalInterval; 

    // etc...
}

class ProcessCustomers
{
    pubic void Arrive()
    {
        // etc...
    }
}

public void goButton_Click(object sender, EventArgs e)            
{                
     Initialisers init = new Initialisers();                    
     ProcessCustomers CustomerQueue = new ProcessCustomers();                    
     CustomerQueue .Arrive();            
}  

ただし、テキスト ボックスの問題については、フォーム クラスでプロパティを公開し、そのように設定する必要があります。

string ArrivalTime
{    
    get     
    {       
       return textBox1.Text;    
    }    
    set    
    {       
       textBox1.Text = value;    
    } 
} 
于 2010-12-07T10:48:48.997 に答える