2013-07-25 58 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) 

可以能夠調用從主(此方法),靜態方法

相關問題