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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/9652576/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-09 08:20:12  来源:igfitidea点击:

Error "An object reference is required for the non-static field, method or property 'QuickSharp.CokeMachine.TotalInsertedCoins'"

c#winforms

提问by BBB

I get the following error when compiling:

编译时出现以下错误:

CS0120: An object reference is required for the non-static field, method or property 'QuickSharp.CokeMachine.TotalInsertedCoins'

CS0120:非静态字段、方法或属性“QuickSharp.CokeMachine.TotalInsertedCoins”需要对象引用

This is because I'm trying to use the TotalInsertedCoins variable from another class (CokeForm). How can I fix this? If I want to add the buttons in my CokeForm method, I'm getting the same issue.

这是因为我正在尝试使用另一个类 (CokeForm) 中的 TotalInsertedCoins 变量。我怎样才能解决这个问题?如果我想在我的 CokeForm 方法中添加按钮,我会遇到同样的问题。

My code:

我的代码:

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);
        }
    }
}

How do I fix this problem? Other questions about the CS0120 error don't bring me any further.

我该如何解决这个问题?关于 CS0120 错误的其他问题并没有给我带来任何进一步的问题。

采纳答案by Ritch Melton

You never create an instance of CokeMachine:

您永远不会创建 CokeMachine 的实例:

if(CokeMachine.TotalInsertedCoins == 0.00)
{
  TextBox1.Text = "Buy Your Ice Cold Drinks Here!";
}
else
{
  TextBox1.Text = "Inserted Coins: " + CokeMachine.TotalInsertedCoins;
}

Create an instance of CokeMachine in the form, and then use that.

在表单中创建一个 CokeMachine 实例,然后使用它。

...
CokeMachine machine = new CokeMachine();
...

if (machine.TotalInstertedCoins == 0.00)
{
 ....
}