【问题标题】:usage of global variable on C#C#中全局变量的使用
【发布时间】:2012-03-16 07:22:16
【问题描述】:

所以我不知道 C# 的术语。 我想要做的是我有 2 个静态空隙

    static void SelectProduct() {
        double moneyamount = 0;

        int selection = int.Parse(Console.ReadLine());
        if (selection == 1) {
            moneyamount = 1.50;       
        }

        else {
            Console.WriteLine("Wrong Selection");
        }

        Console.WriteLine("Your drink costs $" + moneyamount);
        InsertCoin();
    }
    static void InsertCoin() {

        Console.WriteLine("Balance of cost $" + moneyamount);
    }

我的问题是我想在InsertCoin void 中使用moneyamount。 当我在课后立即分配双倍金额时,它给出了一个错误。 我无法返回 moneyamount 因为它是静态的。我必须使用静态,因为我需要回忆它。 那么在这种情况下我该怎么办呢?

【问题讨论】:

    标签: c# variables global void


    【解决方案1】:

    也许你的moneyamount也是静态的。

    static double moneyamount = 0;
    static void SelectProduct() {
        moneyamount = 0;
    
        int selection = int.Parse(Console.ReadLine());
        if (selection == 1) {
            moneyamount = 1.50;       
        }
    
        else {
            Console.WriteLine("Wrong Selection");
        }
    
        Console.WriteLine("Your drink costs $" + moneyamount);
        InsertCoin();
    }
    static void InsertCoin() {
    
        Console.WriteLine("Balance of cost $" + moneyamount);
    }
    

    【讨论】:

      【解决方案2】:

      你有两个选择

      选项1:将moneyAmount作为参数传递给InsertCoin(),即

      static void InsertCoin(double moneyAmount)...
      

      然后从 SelectProduct 中调用它

      InsertCoin(moneyAmount);
      

      选项 2: 简单地将全局变量声明为静态,即

      static double moneyAmount = 0;
      
      static void SelectProduct()...
      
      static void InsertCoin()...
      

      【讨论】:

      • +1,这可以说是一个更好的解决方案,因为它开始摆脱所有这些毫无意义的statics。
      • 您可以查看我的示例进行说明。
      【解决方案3】:

      您在这里有 2 个选择。您可以将 moneyamount 定义为 2 个方法之外的全局变量,并使其可用于两种方法,或者您像以前一样声明它并将其传递给 InsertCoin 方法。

      场景 1:

      static double moneyamount = 0;
      
      static void SelectProduct()
      {
           int selection = int.Parse(Console.ReadLine());
      
           if (selection == 1)
           {
                moneyamount = 1.50;
           }
           else
           {
                Console.WriteLine("Wrong Selection");
           }
      
           Console.WriteLine("Your drink costs $" + moneyamount); 
      }
      
      static void InsertCoin()
      {
           Console.WriteLine("Balance of cost $" + moneyamount);
      }
      

      场景 2:

      static void SelectProduct()
      {
           double moneyamount = 0;
           int selection = int.Parse(Console.ReadLine());
      
           if (selection == 1)
           {
                moneyamount = 1.50;
           }
           else
           {
                Console.WriteLine("Wrong Selection");
           }
      
           Console.WriteLine("Your drink costs $" + moneyamount);
           InsertCoin(moneyamount);
      }
      
      static void InsertCoin(double moneyamount)
      {
           Console.WriteLine("Balance of cost $" + moneyamount);
      }
      

      我希望这会有所帮助。如果您需要更多帮助,请大声喊叫。

      【讨论】:

        【解决方案4】:

        您可以将参数传递给方法。请谷歌“c#函数语法”

         static void InsertCoin(double moneyAmount) 
         {          
           Console.WriteLine("Balance of cost $" + moneyamount);     
         } 
        

        【讨论】:

          【解决方案5】:

          在类中声明您的moneyamount,而不是在类方法中,并将其设为static。这样同一个类中的静态方法就可以访问你的静态变量moneyamount

          将方法声明为static 表示该方法是类的一部分,可以直接从另一个类访问。如果没有static,它将成为对象实例的一部分,并且可以通过对象进行访问。因此,静态方法访问静态变量:

          static string fooString;
          static void FooMethod()
          {
              fooString = "foo"
          }
          

          【讨论】:

            【解决方案6】:

            你可以创建MoneyAmount的静态属性

            static double MoneyAmount
            {get; set;}
            
            static void SelectProduct() 
            {
                MoneyAmount= 0;
            
                int selection = int.Parse(Console.ReadLine());
                if (selection == 1) {
                    MoneyAmount = 1.50;       
                }
            
                else {
                    Console.WriteLine("Wrong Selection");
                }
            
                Console.WriteLine("Your drink costs $" + MoneyAmount);
                InsertCoin();
            }
            
            static void InsertCoin() 
            {
                Console.WriteLine("Balance of cost $" + MoneyAmount);
            }
            

            或者您可以将参数设置为InsertCoin()

            static void SelectProduct() 
            {
                double moneyamount = 0;
            
                int selection = int.Parse(Console.ReadLine());
                if (selection == 1) {
                    moneyamount = 1.50;       
                }
            
                else {
                    Console.WriteLine("Wrong Selection");
                }
            
                Console.WriteLine("Your drink costs $" + moneyamount);
                InsertCoin();
            }
            
            static void InsertCoin(double moneyamount) 
            {
                Console.WriteLine("Balance of cost $" + moneyamount);
            }
            

            换个说法;

            我无法返回 moneyamount,因为它是静态的

            你为什么不能这样做?

            static double SelectProduct()
            {
            ...
            return moneyamount;
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-06-12
              • 1970-01-01
              • 2010-12-20
              • 2017-06-30
              • 1970-01-01
              相关资源
              最近更新 更多