2013-07-25 28 views
2

如何获得以下程序来打印sumOfNumbers方法的结果?我无法在主要方法中调用此方法,我不知道为什么。有人能解释我做错了什么吗?无法执行简单的方法调用

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


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

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

一些解决方案的以下删除静态Main方法。虽然这解决了这个问题,但是'Program.Main'通常是控制台应用程序的入口点,所以这种方法没有用。 – neontapir

回答

6

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

编辑:我被要求多加一点解释。静态方法,例如Main在您的示例中,不属于对象的特定实例。它属于它的类,Program。没有静态修饰符的方法属于类的特定实例。这种差异意味着“无物体”静态方法(Main)只能直接与静态方法或实例化对象然后在对象上调用该方法一起工作。

第二种方法看起来像:

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

我会继续建议修改方法是静态的。我从你的Main方法推断你正在编写一个控制台应用程序,并且按照我的经验来说,实例化这样一个类是非常规的。

+0

至少解释了原因,http://stackoverflow.com/questions/3017708/why-cant-you-call-a-non-static-method-from-a-static-method – mihail

+0

只是为了澄清,为什么OP不能看到'sumOfNumbers'方法,因为你不能从'static'方法调用* instance *方法。 – James

+0

非常感谢你。我将更多地阅读方法签名。 –

2

您或者需要实例化您的Program并致电sumOfNumbers,或者您可以使sumOfNumbers静态。

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

或者,如果你把static关键字在你sumOfNumbers实施前,那么你可以用Program.sumOfNumbers(1, 2);

-2

Console.Writeline(sumOfNumbers(5,5)的ToString)调用它;

+1

您不需要'ToString',也不会因为方法签名未被标记为'static'而工作。 – James

0

总结:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.Writeline(sumOfNumbers(5,5)); 
    } 

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

写在主

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

虽然这是真的,但是'Program'通常是控制台应用程序的入口点,所以这种方法没有用。 – neontapir

1

下面的代码了解有关 “静态” 的关键字会帮助你。请参考 What's a "static method" in C#?

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

不能实例化静态方法中的实例方法,不能实例化类。但反之亦然。

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

private static int sumOfNumbers (int x, int y) 

可以能够调用从主(此方法),静态方法

相关问题