错误“非静态字段,方法或属性’QuickSharp.CokeMachine.TotalInsertedCoins’需要对象引用”

编译时出现以下错误:

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) { .... }