【问题标题】:Unable to perform simple method call无法执行简单的方法调用
【发布时间】:2013-07-25 15:30:15
【问题描述】:

如何让下面的程序打印 sumOfNumbers 方法的结果?我无法在 main 方法中调用此方法,我不知道为什么。谁能解释我做错了什么?

class Program
{
    static void Main(string[] args)
    {


        //Console.WriteLine();
        //Console.ReadLine();
    }

    private int sumOfNumbers (int x, int y)
    {
        return x + y;
    }
}

【问题讨论】:

  • 下面的一些解决方案删除了​​静态 Main 方法。虽然这解决了这个问题,但Program.Main 通常是控制台应用程序的入口点,因此这种方法没有用处。

标签: c#


【解决方案1】:

您的方法有错误的签名。应该是private static int sumOfNumbers(int x, int y)

编辑:有人要求我对此进行更多解释。静态方法,例如您的示例中的Main,不属于对象的特定实例。它属于它的类,Program。没有 static 修饰符的方法属于该类的特定实例。这种差异意味着“无对象”静态方法 (Main) 只能直接使用静态方法,或者通过实例化对象然后在对象上调用该方法。

第二种方法如下所示:

var foo = new Program();
Console.WriteLine(foo.sumOfNumbers(3,2))

我会继续建议将方法修改为静态。我从您的 Main 方法推断出您正在编写一个控制台应用程序,并且实例化这样一个类是非常规的(根据我的经验)。

【讨论】:

  • 至少解释一下原因,stackoverflow.com/questions/3017708/…
  • 为了澄清,OP 看不到 sumOfNumbers 方法的原因是因为你不能从 static 方法调用 instance 方法。
  • 太棒了,非常清楚,谢谢。我将阅读有关方法签名的更多信息。
【解决方案2】:

您需要实例化您的Program 并调用sumOfNumbers,或者您可以将sumOfNumbers 设为静态。

var program = new Program();
var sum = program.sumOfNumbers(1, 2);
Console.WriteLine(sum);

或者,如果您将 static 关键字放在您的 sumOfNumbers 实现之前,那么您可以使用 Program.sumOfNumbers(1, 2); 调用它

【讨论】:

    【解决方案3】:

    了解“静态”关键字会对您有所帮助。参考 What's a "static method" in C#?

    这里的概念是,一种方法是“静态”方法,另一种方法是“实例”方法。

    您不能在不实例化类的情况下从静态方法调用实例方法。但是反之亦然。

    因此,如果您将方法签名转换为,

    private static int sumOfNumbers (int x, int y)
    

    您可以从 main() 中调用此方法,这是一个静态方法

    【讨论】:

      【解决方案4】:

      总结:

      class Program
      {
          static void Main(string[] args)
          {
              Console.Writeline(sumOfNumbers(5,5));
          }
      
          private static int sumOfNumbers (int x, int y)
          {
              return x + y;
          }
      }
      

      【讨论】:

        【解决方案5】:

        在main中编写如下代码

        Program p=new Program();
        Console.Write(p.sumOfNumbers(<any number>,<any number>);
        Console.ReadKey();
        

        【讨论】:

        • 虽然这是真的,但Program 通常是控制台应用程序的入口点,因此这种方法没有用。
        【解决方案6】:

        Console.Writeline(sumOfNumbers(5,5).Tostring);

        【讨论】:

        • 你不需要ToString,这也行不通,因为方法签名没有被标记为static
        猜你喜欢
        • 2020-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多