编译时出现以下错误:
CS0120:非静态字段,方法或属性'QuickSharp.CokeMachine.TotalInsertedCoins'需要对象引用
这是因为我试图使用另一个类(CokeForm)中的TotalInsertedCoins变量。我怎样才能解决这个问题?如果我想在我的CokeForm方法中添加按钮,则会遇到同样的问题。
我的代码:
using System;
using System.Windows.Forms;
using System.Drawing;
namespace QuickSharp
{
public class CokeMachine
{
Button Coke;
Button Sprite;
Button Fanta;
Button RedBull;
Button Juice;
Button Water;
double CokeCost = 1.00;
double SpriteCost = 1.00;
double FantaCost = 1.00;
double RedBullCost = 2.50;
double JuiceCost = 2.00;
double WaterCost = 0.50;
Button Coin1;
Button Coin2;
Button Coin3;
Button Coin4;
Button Coin5;
Button Coin6;
double CoinAmount1 = 0.05;
double CoinAmount2 = 0.10;
double CoinAmount3 = 0.20;
double CoinAmount4 = 0.50;
double CoinAmount5 = 1.00;
double CoinAmount6 = 2.00;
public double TotalInsertedCoins = 0;
//EventHandlers for drink buttons
public void DrinkButtonsEvents()
{
Coke.Click += new EventHandler(Coke_ClickHandler);
Sprite.Click += new EventHandler(Sprite_ClickHandler);
Fanta.Click += new EventHandler(Fanta_ClickHandler);
RedBull.Click += new EventHandler(RedBull_ClickHandler);
Juice.Click += new EventHandler(Juice_ClickHandler);
Water.Click += new EventHandler(Water_ClickHandler);
}
//Drink buttons - Click event handlers
public void Coke_ClickHandler(object sender, EventArgs e)
{
if(TotalInsertedCoins >= CokeCost)
{
DispenseDrink("Coca-Cola", CokeCost);
}
else
{
MessageBox.Show("You have not inserted enough money to buy this drink.", "Warning");
}
}
public void Sprite_ClickHandler(object sender, EventArgs e)
{
if(TotalInsertedCoins >= SpriteCost)
{
DispenseDrink("Sprite", SpriteCost);
}
else
{
MessageBox.Show("You have not inserted enough money to buy this drink.", "Warning");
}
}
public void Fanta_ClickHandler(object sender, EventArgs e)
{
if(TotalInsertedCoins >= FantaCost)
{
DispenseDrink("Fanta", FantaCost);
}
else
{
MessageBox.Show("You have not inserted enough money to buy this drink.", "Warning");
}
}
public void RedBull_ClickHandler(object sender, EventArgs e)
{
if(TotalInsertedCoins >= RedBullCost)
{
DispenseDrink("Red Bull", RedBullCost);
}
else
{
MessageBox.Show("You have not inserted enough money to buy this drink.", "Warning");
}
}
public void Juice_ClickHandler(object sender, EventArgs e)
{
if(TotalInsertedCoins >= JuiceCost)
{
DispenseDrink("Orange Juice", JuiceCost);
}
else
{
MessageBox.Show("You have not inserted enough money to buy this drink.", "Warning");
}
}
public void Water_ClickHandler(object sender, EventArgs e)
{
if(TotalInsertedCoins >= WaterCost)
{
DispenseDrink("Water", WaterCost);
}
else
{
MessageBox.Show("You have not inserted enough money to buy this drink.", "Warning");
}
}
//EventHandlers for money buttons
public void MoneyButtonEvents()
{
Coin1.Click += new EventHandler(Coin1_ClickHandler);
Coin2.Click += new EventHandler(Coin2_ClickHandler);
Coin3.Click += new EventHandler(Coin3_ClickHandler);
Coin4.Click += new EventHandler(Coin4_ClickHandler);
Coin5.Click += new EventHandler(Coin5_ClickHandler);
Coin6.Click += new EventHandler(Coin6_ClickHandler);
}
//Money buttons - Click event handlers
public void Coin1_ClickHandler(object sender, EventArgs e)
{
TotalInsertedCoins += CoinAmount1;
}
public void Coin2_ClickHandler(object sender, EventArgs e)
{
TotalInsertedCoins += CoinAmount2;
}
public void Coin3_ClickHandler(object sender, EventArgs e)
{
TotalInsertedCoins += CoinAmount3;
}
public void Coin4_ClickHandler(object sender, EventArgs e)
{
TotalInsertedCoins += CoinAmount4;
}
public void Coin5_ClickHandler(object sender, EventArgs e)
{
TotalInsertedCoins += CoinAmount5;
}
public void Coin6_ClickHandler(object sender, EventArgs e)
{
TotalInsertedCoins += CoinAmount6;
}
private void DispenseDrink(string drink , double cost)
{
if(TotalInsertedCoins - cost == 0.0)
{
MessageBox.Show("Enjoy your " + drink + "!");
TotalInsertedCoins = 0.0;
}
else
{
MessageBox.Show("Enjoy your " + drink + "! Here is your change: €" + (TotalInsertedCoins - cost));
TotalInsertedCoins = 0.0;
}
}
}
public class CokeForm : Form
{
public CokeForm()
{
// General aspect of machine
this.Text = "Cola Machine";
this.Size = new Size(450, 500);
Label Header;
Header = new Label();
Header.Text = "Coca-Cola Machine";
Header.Font = new Font("Arial", Header.Font.Size + 5);
Header.ForeColor = Color.DarkRed;
Header.Location = new Point(132, 20);
Header.AutoSize = true;
this.Controls.Add(Header);
TextBox TextBox1 ;
TextBox1 = new TextBox();
TextBox1.BackColor = Color.Black;
TextBox1.ForeColor = Color.Red;
TextBox1.Font = new Font("Arial", TextBox1.Font.Size + 3);
TextBox1.ReadOnly = true;
TextBox1.Size = new Size(210, 300);
TextBox1.Location = new Point(112, 50);
//TextBox1.SelectionStart = TextBox1.Text.Length;
//TextBox1.ScrollToCaret();
//TextBox1.Refresh();
if(CokeMachine.TotalInsertedCoins == 0.00)
{
TextBox1.Text = "Buy Your Ice Cold Drinks Here!";
}
else
{
TextBox1.Text = "Inserted Coins: €" + CokeMachine.TotalInsertedCoins;
}
this.Controls.Add(TextBox1);
// Money aspect of machine
Label Money;
Money = new Label();
Money.Text = "Insert Coins Here:";
Money.Location = new Point(20, 100);
this.Controls.Add(Money);
//Money buttons will be here
// Drink aspect of machine
Label Drinks;
Drinks = new Label();
Drinks.Text = "Choose Your Drink:";
Drinks.Location = new Point(315, 100);
Drinks.AutoSize = true;
this.Controls.Add(Drinks);
//Drink buttons will be here
}
}
public class Test
{
public static void Main()
{
CokeForm ColaForm;
ColaForm = new CokeForm();
Application.Run(ColaForm);
}
}
}
我该如何解决这个问题?有关CS0120错误的其他问题不会给我带来更多影响。
最佳答案
您永远不会创建CokeMachine的实例:
if(CokeMachine.TotalInsertedCoins == 0.00)
{
TextBox1.Text = "Buy Your Ice Cold Drinks Here!";
}
else
{
TextBox1.Text = "Inserted Coins: €" + CokeMachine.TotalInsertedCoins;
}
在窗体中创建CokeMachine的实例,然后使用它。
...
CokeMachine machine = new CokeMachine();
...
if (machine.TotalInstertedCoins == 0.00)
{
....
}
关于c# - 错误“非静态字段,方法或属性'QuickSharp.CokeMachine.TotalInsertedCoins需要对象引用”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9652576/