私は "自動販売機"を作っています。私は総売上とマシンに残っている飲み物の量を索引付けする必要があります。今私はそれがユーザーがソーダの画像をクリックすると設定されて、それはロジックを行います。ここでは完全なクラスがある:ユーザーが画像をクリックして、これまで構造体の構造体とオブジェクトは、クラス内でどこに属していますか?
Drink Coke = new Drink();
Coke.Name = (string)Cola[0, 0];
Coke.Price = (float)Cola[0, 1];
Coke.Amount = (int)Cola[0, 2];
、これらの変数がリセットされた場合:
namespace _8_11
{
struct Drink
{
public string Name;
public float Price;
public int Amount;
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
object[,] Cola = new object[,]
{
{"Coke", 1.00f, 20 },
{"Beer", 1.00f, 20 },
{"Sprite",1.00f, 20 },
{"Grape", 1.50f, 20 },
{"Cream", 1.50f, 20 }
};
float total = 0.00f;
private void pictureBox1_Click(object sender, EventArgs e)
{
Drink Coke = new Drink();
Coke.Name = (string)Cola[0, 0];
Coke.Price = (float)Cola[0, 1];
Coke.Amount = (int)Cola[0, 2];
if (Coke.Amount > 1 && Coke.Amount <= 20)
{
Coke.Amount -= 1;
total += Coke.Price;
cokeLeftLabel.Text = Coke.Amount.ToString();
totalSalesLabel.Text = total.ToString("c");
}
else {
MessageBox.Show("We are out of Coke!");
}
}
}
}
主な問題は、コードがあることです。私はクリックされたメソッドの外でこれらの変数を初期化する必要がありますが、このメソッドの外側に移動しようとするとコンパイルエラー "Coke.Amountがこの現在のコンテキストに存在しません"が返されます。
私はそれを修正しました。ここで改訂されたコードは次のとおりです。
if (Coke.Amount > 0 && Coke.Amount <= 20)
{
Coke.Amount -= 1;
Cola[0, 2] = Coke.Amount;
total += Coke.Price;
cokeLeftLabel.Text = Coke.Amount.ToString();
totalSalesLabel.Text = total.ToString("c");
}
クラス内に公開Drink変数を作成すると、クラス内のすべてのメソッドで利用できるようになります。静的にすると、他のクラスでも使用できるようになります。これをやろうとしましたか? – vipersassassin
あなたの直ぐの問題はスコープですが、この場合には 'struct'を使う理由はなく、解決するよりも多くの問題が生じます。 'struct'から' class'に 'Drink'を変更すると、可変構造体が作る多くの問題を避けることができます。 –
先生が2次元配列を使用するように言ったら、彼は犯罪者としては狂ってしまいます。彼が言うように譲渡を行うべきですが、船積み用のコンテナを点検するように頼んだら丁寧に辞めることを忘れないでください。 –